Доброго дня! Скажите, п-та, будет ли серверная ОС посылать какой-либо TCP сегмент (RST??) в ответ на клиентский SYN, если никакое из запущенных на сервере приложений не ждет подключения к соответствующему порту? Еще вопрос: Можно ли в Windows (XP SP2, Vista, Server 200x) вообще работать на уровне IP датаграмм не залезая в нулевое кольцо? Я слышал про RAW сокеты, но в MSDN (да и здесь) сказано, что с их помощью нельзя отправлять TCP сегменты. Задача у меня простая: Анализировать IP датаграммы, приходящие на сервер. Ну а затем либо пускать их дальше в приложухи, либо менять, либо посылать далее измененными. Вот еще, до кучи: Кто считает контрольные суммы для ethernet, ip и TCP? Если этим (хотябы для ethernet) занимается железо, не будет ли уменьшения производительности при расчете checksum в приложении? Thx!
Почему бы Вам не установить какой-нить сниффер, да самому поглядеть? Собрать и Отправлять любые tcp пакеты ты смогешь, дело в том смогешь ли ты принимать ответы, вить tcp протокол это тебе не датаграмма, мол отправил и забил на него.. Почитай rfc tcp протокола, а еще ты не смогешь собрать ethernet пакет и отправлять средствами windows, юзай winpcap. ИМХО: winpcap лучшая альтернатива когда есть желание поиграться с пакетами.
многие (но не все) сетевые карты поддерживают checksum offload. лично сталкивался с багами при подсчете checksum интеловскими чипами да, насчет производительности - после включения checksum offload в наших приложениях она выросла, но это зависит от интенсивности работы с сетью.
Это что-то firewall-образное. Для полного контроля над пакетами тебе нужет NDIS intermediate driver (2000, XP, Vista) или NDIS 6 filter driver (vista). Ессно это ring0.
Вот я сначала тоже на него глаз положил. попробовал с его помощью сделать вот что: 1) На машине А поднял ТСП сервер (простой терминал от Вин) на порту 12345 2) С машины Б пытался коннектиться телнетом на машину А на порт 54321 3) На машине А фильтровал все ТСП сегменты, приходящие на порт 54321, и менял порт приемника на 12345 4) На машине А фильтровал все ТСП сегменты, "исходящие" с порта 12345, и менял порт источника на 54321 Чем то смахивает на урезанный NAT. Думал удасться мне подключиться с Б на А и покидать траффик (по TCP). В конце концов, за реализацию TCP отвечал бы не я. Даже получилось сделать >SYN <SYN_ACK >ACK. Но затем соединение обрывалось ((. Начал снифить траффик - увидел, что кто-то посылает моему клиенту RST (помимо моего серверного SYN_ACK). Ну и предположил, что это делает ОС, т.к. не знает что кто-то "слушает" этот порт. Это верно? Т.Е. winpcap подходит, когда нужно что-то посмотреть, либо что-то послать. Но не подходит, если надо что-то перехватить...
nester7, ssx Thx! Да, нечто похожее и нужно... Нет опыта в ring0 - вот и надеялся обойтись чем-то мне понятным. Все-таки требуемый функционал (см. предыдущий пост) проще на порядки, чем в самом простом экране.
Я точно так же когда-то давно обломался. Это сам стек в ОС делает. На любой незнакомый TCP пакет в ответ летит RST. Некоторые сканеры так даже виндовую операционку на компе. опознают. Свой стек поверх текущего написать просто так не получится)))
Вот я так и подумал - а теперь убедился) Мне целиком стек не нужен. Задача - только подмена адресов в IP, портов в TCP (UDP) ну и некоторый мониторинг содержимого. Неужели для этого нужно лезть в ядро? Есть ведь приложения, которые не ставят своих драйверов и работают ниже чем WinSock.
Это можно сделать только из драйвера. Ты можешь использовать уже готовый toolkit (например http://ntndis.com/w&p.php?id=7 ) и тогда тебе всего-лишь надо написать простую user mode прогу.