TCP. Сервер не ждет подключений (RST?).

Тема в разделе "WASM.NETWORKS", создана пользователем Span, 7 июл 2008.

  1. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Доброго дня!

    Скажите, п-та, будет ли серверная ОС посылать какой-либо TCP сегмент (RST??) в ответ на клиентский SYN, если никакое из запущенных на сервере приложений не ждет подключения к соответствующему порту?

    Еще вопрос:
    Можно ли в Windows (XP SP2, Vista, Server 200x) вообще работать на уровне IP датаграмм не залезая в нулевое кольцо?
    Я слышал про RAW сокеты, но в MSDN (да и здесь) сказано, что с их помощью нельзя отправлять TCP сегменты.

    Задача у меня простая:
    Анализировать IP датаграммы, приходящие на сервер. Ну а затем либо пускать их дальше в приложухи, либо менять, либо посылать далее измененными.

    Вот еще, до кучи:
    Кто считает контрольные суммы для ethernet, ip и TCP? Если этим (хотябы для ethernet) занимается железо, не будет ли уменьшения производительности при расчете checksum в приложении?

    Thx!
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Почему бы Вам не установить какой-нить сниффер, да самому поглядеть? :)
    Собрать и Отправлять любые tcp пакеты ты смогешь, дело в том смогешь ли ты принимать ответы, вить tcp протокол это тебе не датаграмма, мол отправил и забил на него..
    Почитай rfc tcp протокола, а еще ты не смогешь собрать ethernet пакет и отправлять средствами windows, юзай winpcap.
    ИМХО: winpcap лучшая альтернатива когда есть желание поиграться с пакетами.
     
  3. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    http://www.wasm.ru/forum/viewtopic.php?id=19449
     
  4. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    многие (но не все) сетевые карты поддерживают checksum offload. лично сталкивался с багами при подсчете checksum интеловскими чипами :)
    да, насчет производительности - после включения checksum offload в наших приложениях она выросла, но это зависит от интенсивности работы с сетью.
     
  5. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Это что-то firewall-образное. Для полного контроля над пакетами тебе нужет NDIS intermediate driver (2000, XP, Vista) или NDIS 6 filter driver (vista). Ессно это ring0.
     
  6. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Вот я сначала тоже на него глаз положил.
    попробовал с его помощью сделать вот что:
    1) На машине А поднял ТСП сервер (простой терминал от Вин) на порту 12345
    2) С машины Б пытался коннектиться телнетом на машину А на порт 54321
    3) На машине А фильтровал все ТСП сегменты, приходящие на порт 54321, и менял порт приемника на 12345
    4) На машине А фильтровал все ТСП сегменты, "исходящие" с порта 12345, и менял порт источника на 54321

    Чем то смахивает на урезанный NAT.

    Думал удасться мне подключиться с Б на А и покидать траффик (по TCP). В конце концов, за реализацию TCP отвечал бы не я. Даже получилось сделать >SYN <SYN_ACK >ACK. Но затем соединение обрывалось ((.
    Начал снифить траффик - увидел, что кто-то посылает моему клиенту RST (помимо моего серверного SYN_ACK). Ну и предположил, что это делает ОС, т.к. не знает что кто-то "слушает" этот порт. Это верно?

    Т.Е. winpcap подходит, когда нужно что-то посмотреть, либо что-то послать. Но не подходит, если надо что-то перехватить...
     
  7. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    nester7, ssx Thx!

    Да, нечто похожее и нужно...
    Нет опыта в ring0 - вот и надеялся обойтись чем-то мне понятным. Все-таки требуемый функционал (см. предыдущий пост) проще на порядки, чем в самом простом экране.
     
  8. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Я точно так же когда-то давно обломался. Это сам стек в ОС делает. На любой незнакомый TCP пакет в ответ летит RST. Некоторые сканеры так даже виндовую операционку на компе. опознают.

    Свой стек поверх текущего написать просто так не получится)))
     
  9. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Вот я так и подумал - а теперь убедился)

    Мне целиком стек не нужен. Задача - только подмена адресов в IP, портов в TCP (UDP) ну и некоторый мониторинг содержимого. Неужели для этого нужно лезть в ядро? Есть ведь приложения, которые не ставят своих драйверов и работают ниже чем WinSock.
     
  10. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Это можно сделать только из драйвера. Ты можешь использовать уже готовый toolkit (например http://ntndis.com/w&p.php?id=7 ) и тогда тебе всего-лишь надо написать простую user mode прогу.
     
  11. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Спасибо, как раз то что надо!