Как реализовать обработчик пакетов icmp с помощью winsock версии 1.1?

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

Может кто-нибудь мне помочь? Или это вообще невозможно?

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


person Emma Jin    schedule 14.12.2009    source источник


Ответы (2)


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

person Greg Hewgill    schedule 14.12.2009

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

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

EDIT: я предполагаю, что вы можете делать все, что хотите, с необработанными сокетами., что требует перехода на Winsock 2, если вы должны использовать встроенный Winsock в операционных системах MS. Изменить программу для использования Winsock 2 вместо Winsock 1.1 несложно; одно изменение библиотеки, одно изменение файла заголовка и изменение вызова WSAStartup, и все готово. Необработанные сокеты ICMP позволяют создавать любые пакеты ICMP, которые вы хотите, а в более новых операционных системах вы также можете прослушивать пакеты ICMP. Если окажется, что стек не позволяет прослушивать нужные вам пакеты через сокеты, вы можете сделать это с помощью методы захвата пакетов.

person Warren Young    schedule 15.12.2009