| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Мне надо написать программу, которая фильтровала |
| Автор: Monty 20.10.2003, 22:07 |
| но с чего начать не знаю ...... главная задача: поиск и справления содержимого пакета ..... допустим, байт FF заменять на 00 и т.д. ........... как это можно сделать |
| Автор: Dmitry V.Abramov 20.10.2003, 23:51 |
| Так в чем вопрос то? Какая сеть? Какой протокол? Формат пакета? |
| Автор: Baa 21.10.2003, 01:09 |
| Так а в чем проблема? если приходят на один порт, а должны уходить с другого... с виду вообще плевое дело... открой самые простые исходники клиент-серверных приложений и посмори, как это делается. |
| Автор: Monty 21.10.2003, 03:18 | ||
Нужен пример как сделать перенаправление с одного порта на другой, при этом обрабатывать данные Сеть можно считать LAN Протокол TCP и нужен будет UDP Формат пакета любой ........ а заголовки пакета изменять возможно? Так как это тоже может понадобится Baa таких исходников у меня нет |
| Автор: Dmitry V.Abramov 21.10.2003, 03:24 |
| Baa А если речь о пакетах TCP, UDP, ARP, IPX, или что там еще может по сети летать... Вдруг человека заставили писать маршрутизатор? Тогда еще встанет задача работы с несколькими сетевыми интерфейсами. Вобщем, почти бесконечная тема при данной постановке "вопроса". |
| Автор: Monty 21.10.2003, 03:45 |
| Dmitry V.Abramov это я для себя Есть программы похожие как CommView, Iris Network Analiser и т.д. ...... они позволяют отлавливать пакеты и редактировать их, в том числе и заголоки ........ мне всего лишь надо фильтровать их, можно сказать "налету" |
| Автор: Dmitry V.Abramov 21.10.2003, 14:52 | ||
Это еще терпимо... Главная проблема, пробраться почти на самый нижний уровень TCP-стека, решается с помощью SDK от http://winpcap.polito.it/. Остальное - написанием оптимального и очень быстрого кода. |
| Автор: Dayana 21.10.2003, 18:35 | ||
| вот код, который я когда-то писала, используя TWSocket попробуй что-то типа этого
сейчас я модуль wsocket не нашла, хотя думала, что он входит в поставку Делфи... у меня есть wsocket.dcu... если хочешь, вышлю... И завтра поищу исходник... |
| Автор: Monty 21.10.2003, 19:06 |
| Dayana спасибо .... уже что-то проясняется Dmitry V.Abramov не знаю я С |
| Автор: Dayana 21.10.2003, 19:10 |
| Monty, я имела ввиду исходник wsocket... :-) |
| Автор: Monty 21.10.2003, 19:50 | ||
Dayana оказывается его у меня нет |
| Автор: Dmitry V.Abramov 21.10.2003, 21:23 | ||
"Врага нужно знать и уважать"... Врядли ты найдешь столь низкоуровневые сетевые вещи, писанные не на С. С другой стороны - там ведь есть готовые DLL! Уж в заголовочых файлах то можно разобрать набор параметров для 2,3,4 интересующих функций... |
| Автор: Dmitry V.Abramov 21.10.2003, 21:42 | ||
Это стандартнейшая посылка UDP-message через Winsocket. Такое есть в любой библиотеке, не только в TWSocket от ICS (piette). TIdUDPClient/TIdUDPServer из Indy - ничем не хуже в этом плане. До пакетов же еще очень далеко. Работа с сетевыми пакетами лежит гораздо глубже. Там уже нет сокетов. Там порты, заголовки, фреймы, очереди, лешие, водяные... Русалок пока не попадалось. |
| Автор: Dayana 21.10.2003, 23:00 |
| Dmitry V.Abramov, тем не менее, используя winsocket, я с успехом получаю каждый пакет и обрабатываю его.... |
| Автор: Dayana 21.10.2003, 23:12 | ||
Или вот, открывает сокет на получение любых пакетов:
это уже на низком уровне... |
| Автор: Dmitry V.Abramov 22.10.2003, 00:25 |
| Dayana ... Сокеты никогда не были "низким уровнем", ибо изначально задуманы для его сокрытия. Как бы эдак заполнить TSockAddrIn, чтобы послать пакет с адресом соседа в поле sin_addr? Может вас смущают названия переменных RcvPack и PackLen ? Назовите их RcvMsg и MsgeLen. Или RcvBuffer и BufferLen. Так будет гораздо ближе к их настоящей роли в формировании сетевого пакета. |
| Автор: Dmitry V.Abramov 22.10.2003, 00:33 | ||
Безусловно! Но все его поля вам не доступны. Лишь пользовательские данные и немного адресных. Вы сможете с помощью winsock отправить от себя ping на одну машину, но чтобы echo та послала на другую (не на ту, откуда уходил ping)? Вопрос риторический... Видимо, все из-за несогласовавнной терминологии - в одни и те же слова мы вкладываем очень разный смысл. Еще хуже с этим обстоит дело в изначальном вопросе этого раздела... |
| Автор: Monty 22.10.2003, 00:49 |
| Все, я определился с программой Dayana спасибо Dmitry V.Abramov ок, раберусь, но если не выйдет с WinSock |
| Автор: Monty 22.10.2003, 00:59 | ||
| Не выходит с примером =\ Вот так выглядит пакет:
Мне нужно только изменить то что он несет ....... допустим, rules на bules :) ...... приняв его с порта 3000 и отослать его на удаленный сервер на порт 4000 :) ........ как то так PS согласен что неправильно сформулировал вопрос в самом начале :) ...... |
| Автор: Dmitry V.Abramov 22.10.2003, 01:53 |
| Monty Ну так, а как был получен этот пакет - раскроешь страшную тайну? Можно, конечно, покопавшись вычислить чей это буффер, с какого адреса и на какой шел, и с какого на какой порт. Но проще спросить об этом автора. |
| Автор: Dayana 22.10.2003, 10:09 |
| Monty, на всякий случай, может быть что-то полезное вычитаешь http://forum.vingrad.ru/index.php?act=ST&f=2&t=6256&st=0. Поищи в сети описание заголовка пакета. В нем зашит и порт, и мак адрес, и остальная инфа... А вообще я с помощью сниффера смотрела, какие байты, что содержат... |
| Автор: Monty 22.10.2003, 18:26 | ||
| Пакет я с помощью снифера получил Dmitry V.Abramov ![]() PS программа с таким кодом замирает тут же не открыв порта
|
| Автор: Monty 22.10.2003, 18:33 |
| Dayana я нашел тот компонент который ты использовала http://overbyte.delphicenter.com/frame_index.html |
| Автор: Dayana 22.10.2003, 21:15 |
| Monty, точно... я же оттуда его брала... Ну у тебя получилось? |
| Автор: Monty 22.10.2003, 21:16 | ||
Все демосы там работают .... пока буду сам разбиратся .... спасибо PS там нашел еще пару нужных компонентов которые я искал долго Добавленно: Просто появилась еще одна проблемма .... у той программы что я хотел перенапрявлять пакеты не фиксированый порт |
| Автор: Dmitry V.Abramov 22.10.2003, 22:47 | ||||
О каком порте речь в подслушивающем режиме? Порт - это всего лишь 2 байта в заголовке. К тебе же начинают валить все заголовки сразу. Не замирает, а внимательно слушает У тебя, видимо, ничего не происходит по адресу 127.0.0.1. Попробуй, например, ping 127.0.0.1 А еще - SIO_RCVALL работает только в win2000 и выше. У тебя не Win9x? Кстати, GetHostName/GetHostByName раньше было принято вызывать строго после WSAStartUp. |
| Автор: Dmitry V.Abramov 22.10.2003, 23:01 | ||||||
Либо не заметил вот этой строчки, либо она появилась после "Это сообщение отредактировал Dayana - 21.10.2003, 23:15 " ;) Если не заметил, то виноват и отзываю последующие затем хихикания. Тогда зацепился вот за это:
Вот только работать это будет лишь начиная с win2000. И не совместимо с программированием юниксных сокетов. Последнее может быть не важно. А вот первое... |
| Автор: Baa 23.10.2003, 00:54 | ||
Вы прикалываетесь чтоли? енто ж loopback... ping localhost = тест сетевой карты... |
| Автор: Dmitry V.Abramov 23.10.2003, 02:06 | ||||
Нужно создать поток сетевых пакетов. Чем плох пинг в этом случае? Тем что шлет ICMP? Так ведь снифферу что там летает. А вот сетевую карту я бы не стал тестировать пингами на 127.0.0.1... |
| Автор: Monty 23.10.2003, 05:43 |
| Не выходит у меня с компонентами |