| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > Должен ли RAW сокет принимать DHCP запросы клиента |
| Автор: Black_Wolf 17.11.2008, 06:51 |
| Не получается принять через RAW сокет DHCP запрос клиента. Т.е. лимитированный широковещательный IP пакет с адресом отправителя 0.0.0.0. Использую RAW вместо датаграмного UDP потому что есть необходимость ливить все IP пакеты. Должен ли RAW сокет видить эти пакеты? Возможно нужно установить какие-то опции сокета? |
| Автор: bio_hazard 17.11.2008, 09:29 |
| Мне кажется через сокет вы не сомжете ловить все пакеты, сокет видит только те пакеты которые предназначены только ему. Все пакеты можно ловить напрямую на сетевом интерфейсе, и потом анализировать. |
| Автор: Black_Wolf 17.11.2008, 09:52 |
| bio_hazard Что бы ловить напрямую программка готова, но хотелось бы ловить на более высоком уровне через сырые RAW, без библиотеки Winpcap или libpcap. Если перевести сетевой адаптер в неразборчивый режим, то RAW сокет позволяет ловить практически все IP пакеты, но вот почему-то DHCP запросы не хочет. |
| Автор: bio_hazard 17.11.2008, 12:03 |
| К сожалению больше чем сказал, информации больше дать не могу. |
| Автор: MAKCim 17.11.2008, 13:13 |
| Black_Wolf, т. е на хосте запущен DHCP сервер, которому идут запросы с локальной сети необходимо через RAW сокет перехватить запросы, так? |
| Автор: Black_Wolf 18.11.2008, 06:03 |
| MAKCim Клиент подключен к серверу через узел посредник на котором установлена винда XP, и на котором и работает моя программа. На этом узле два сетевых адаптера, мне нужно добиться хотя бы того чтобы пакеты транслировались с одного интерфейса на другой, т.е. организовать подключение типа мост. Но именно усилиями моей программы, а не винды, т.к. моя прога в будущем должна будет в нужные моменты подменять трафик отправляемый серверу. Прием обычных IP пакетов проходит нармально. Собственно, сложились такие технические обстоятельства, что передачу этих обычных пакетов я проверить пока не могу, но могу в полной мере проверить прием и передачу DHCP запросов клиента. Ну вот и возникла проблема, обычные и широковещательные пакеты с конкретным адресом отправителя вижу, а DHCP запросы нет. Вот я и пытаюсь понять, или опции сокета выставить какие-то нужно, или в операционной системе причина, или еще что-то. |
| Автор: Black_Wolf 18.11.2008, 12:43 | ||
| MAKCim Тем что в запросах клиента (например, DHCPDISCOVER) IP адрес отправителя заполняеться нулями. Пока решал одну проблему медленно всплыла другая. На Windows Vista отправка пакетов по sendto работает, на XP SP2 sendto дает ошибку 10004 Из msdn
На форумах читал что в SP2 якобы отправка пакетов raw сокетами с ручным формированием IP заголовка запрещена, и в результате возникает ошибка 10004 при вызове sendto. |
| Автор: Black_Wolf 18.11.2008, 13:03 |
| MAKCim Если сильно упростить мою проблему, то можно представить так. Два узла соеденены между собой по Ethernet напрямую. На первом узле установлена ОС Windows XP SP2 и запущена моя прога, на втором узле ОС допустим Windows, Linux или FreeBSD. На первом узле сетевому адаптеру присвоен статический IP, на втором узле сетевой адаптер настроен на DHCP. Запускаем мою прогу на первом узле и слушаем единственный интерфейс. Перезагружаем второй узел. При загрузке второго узла мы должны увидеть его DHCP запросы DHCPDISCOVER на первом узле. Или у меня руки кривые или ОС так настроена на первом узле, но я их не вижу. Пока склоняюсь к первому варианту. |
| Автор: Black_Wolf 18.11.2008, 13:58 | ||
| Интересная статья по этому поводу http://www.xakep.ru/magazine/xa/109/050/1.asp И http://technet.microsoft.com/en-us/library/bb457156.aspx#EHAA
На XP SP2 выход один: Использовать Winpcap |
| Автор: MAKCim 18.11.2008, 18:01 |
| Black_Wolf, ну как бы внешний IP (адрес отправителя) проверяется только в случае если он был определен через connect() |