Как реализовать обработчик пакетов icmp с помощью winsock версии 1.1? - PullRequest
1 голос
/ 14 декабря 2009

Я сейчас работаю над очень старым приложением. Мне нужно внести изменения в это приложение, чтобы прослушать поступающий запрос icmp и принять решение об ответе или отбрасывании пакета (вид контроля доступа по ICMP). Приложение основано на Winsock версии 1.1. Я пробовал разные способы создания сокета и захвата пакета icmp с помощью сокета. Но ни одно из моих усилий не сработало.

Кто-нибудь может мне помочь? Или это совершенно невозможно?

Большое спасибо за ваш ответ.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2009

Вы говорите, что приложение старое, но ничего об ОС, на которых оно запущено. Если вы не используете его в 16-битной Windows или NT 3.x, нет веской причины, по которой вы не можете просто перейти на Winsock 2. Вы можете загрузить Winsock 2 для Win95, и он поставляется во всех более поздние ОС Win9x, а также в Windows NT 4 и более поздних версиях.

Если вам действительно нужно запустить это приложение на Win16, возможно, будет возможно выкопать один из сторонних стеков Winsock той эпохи, который действительно предлагал поддержку сырых сокетов, но это звучит как огромная проблема, если вы хотите сделать это на законных основаниях. Проще просто указать Win98 как минимальную версию ОС и двигаться дальше.

РЕДАКТИРОВАТЬ : Я предполагаю, что вы можете делать то, что вы хотите, с raw сокетами , что требует перехода на Winsock 2, если вы должны использовать встроенный Winsock в операционных системах MS , Изменить вашу программу на использование Winsock 2 вместо Winsock 1.1 легко; одно изменение библиотеки, одно изменение файла заголовка и изменение вызова WSAStartup, и вот вы здесь. Необработанные сокеты ICMP позволяют вам создавать любые ICMP-пакеты, которые вы хотите, и в более новых ОС вы также можете прослушивать ICMP-пакеты. Если окажется, что стек не позволит вам прослушивать пакеты, которые вам нужны, через сокеты, вы можете вместо этого использовать захват пакетов .

0 голосов
/ 15 декабря 2009

Не думаю, что вы сможете перехватывать ICMP-пакеты на уровне приложения (Winsock), поскольку это не функция приложения. Вероятно, вам потребуется написать драйвер сетевого фильтра для любой версии Windows, на которой работает ваше приложение.

...