![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
Kill_em_all |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.4.2005 Репутация: нет Всего: нет |
Где можно найти инфу пр сканирование при помощи SYN пакетов
или rfc документ по SYN пакетам. Или на худой конец исходник проги сканирующей с помощью этих пакетов ![]() |
|||
|
||||
dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
Там вроде как концептуально все просто. Посылается TCP пакет с включенным SYN битом. Если в ответ приходит TCP пакет с включенными SYN и ACK битами, то порт открыт и слушает. Если приходит TCP пакет с включенным RST битом, то порт соответсвенно закрыт.
Если все действительно так и делать в лоб, то написание кода сводится к созданию link layer сокета, небольшой возней с TCP и IP заголовками, и sendto. Ну а потом recvfrom все пакеты пока не получим ответ на наш SYN пакет. Не исключаю, что я в чем то неправ и там все намного сложнее ![]() |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
Kill_em_all
Дык а чего ? Курни libnet (сишная которая, не перловская, шарить в гугле или www.sf.net) и НОУ ПРОБЛЕМ ![]() IP адреса TTL Порты TCP флаги. Кажись все. Остальное сама поставит и чексум посчитает. Мне нравится.
Для виндового компа, извиняюсь, не так ![]() |
|||
|
||||
Kill_em_all |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.4.2005 Репутация: нет Всего: нет |
link layer сокет(в смысле)?Это ли не RAW-сокет? Да, а можно ли подобным (или еще каким-нить способом) просканить UDP-порты? Я посмотрю rfc по tcp, но если никого не затруднит выложить исходник с примером
Это либа или dll? |
||||
|
|||||
dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
Kill_em_all
RAW сокеты бывают разные. socket(AF_INET, SOCK_RAW, PROTOCOL_XXX); Такой сокет предоставляет доступ к network layer'у. При этом далеко не любой входящий пакет ядро направит в такой сокет. К примеру IP пакеты в которых TCP или UDP пакеты в аткой сокет не попадут. А IP пакет с неизвестным содержимым - попадет. У Стивенса есть подробное описание какие пакеты в такой сокет попадут. socket(PF_PACKET, SOCK_DGRAM, PROTOCOL_XXX); Такой сокет позволяет получить доступ к link layer'у. Вот из него уже можно получать все входящие пакеты. Как-то пробовал сварганить простой сниффер и как раз такой сокет использовал. GrayCardinal Очень интересная деталь про виндовую реализацию TCP 3 way handshake'а. Только напрашивается вопрос: нафига эти вариации? К примеру виндовый комп общается с линуксовым. При неудачном 3wh линуксовый комп шлет TCP пакет с RST флагом. А что винда? А винда его не ждет, и ежели такой пакет придет она его должна по идее проигнорировать. И как это называется? Это сообщение отредактировал(а) dwr_budr - 29.11.2005, 13:32 |
|||
|
||||
Kill_em_all |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.4.2005 Репутация: нет Всего: нет |
Я к тому, что я написал сниффер, но использовал
socket(AF_INET, SOCK_RAW, IPPROTO_IP); а потом ioctlsocket(s, SIO_RCVALL, &flag); и я получал и tcp и udp пакеты Я никак не разберусь как разобрать tcp пакет Не покажешь ли как собрать и разобрать в структуру? |
|||
|
||||
dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
Прикольная фича. А ты с такими опциями получал именно голые TCP и UDP пакеты или IP пакеты?
А сам TCP пакет разобрать вроде несложно. В netinit/tcp.h определена struct tcphdr. Так что читай в такую структуру заголовок, проверяй включены ли SYNACK/RST флаги и я буду стирать nmap ![]() Это сообщение отредактировал(а) dwr_budr - 29.11.2005, 13:30 |
|||
|
||||
Kill_em_all |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.4.2005 Репутация: нет Всего: нет |
А при этом не надо сокет переводить в неразборчивый режим? И tcp.h у меня нету ![]() Где ее можно взять(пишу я на VC++7) Это сообщение отредактировал(а) Kill_em_all - 30.11.2005, 11:29 |
|||
|
||||
Kill_em_all |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.4.2005 Репутация: нет Всего: нет |
А при этом не надо сокет переводить в неразборчивый режим?(ioctlsocket(s, SIO_RCVALL, &fl));
Надеюсь это та структура? Если да то спасибо, вроде бы понял (хотя еще не написал сканер) |
||||
|
|||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
dwr_budr
Да фигня а не реализация. Хотя мелкомягких тоже можно понять. Тупой сканер вроде for () {connect} уже не включишь. Да и nmap в отсойнике ![]() ![]() ![]() ![]() ![]() ![]() ЗЫ Ты еще не стер nmap ? Стирай нафиг ![]() ![]() ![]() ![]() ![]() |
|||
|
||||
dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
Kill_em_all
Я так и не понял куда направлен вопрос про неразборчивый режим. Если это в тему о link layer сокете, то не надо, потому как он уже получает все пакеты. Хотя наверняка и его можно настроить разными способами. А какую структуру используют в винде я не знаю, но та которую ты показал выглядит как надо. |
|||
|
||||
dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
GrayCardinal
Не понял почему for(;;) connect() сканнер не прокатит. Я понимаю, что такой сканнер тормознутый, но это уже другой вопрос. А по поводу виндовго 3wh. Все же ну очень бредовая реализация. Ты уверен что ничего не путаешь? Где ты о такой фиче вычитал? Вот ты говоришь что если порт закрыт - ничего не придет. Тем не менее ответ может не прити не только потому что порт закрыт , но еще и потому что пакет не дошел и в таком случае запрос надо повторить. Как понять что же произошло? В итоге даже если порт действительно закрыт винда снова будет пробовать посылать запрос? |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
Я вычитал ? Да нифига. Сам сидел и слал SYN на microsoft.com Собственноручно. Ни один RST не пришел. Зато SYN/ACK - как положено. По сети проверял - у меня только виндовые компы. Та же фичя. Мож сам попробовать.
Включаешь tcpdump -vvv Далее connect () SYN уйдет - RST будешь ждать вечность (или пока не надоест ![]() И connect () будет ждать. Ну и SYN повторять. Только у него RTO сумасшедший (60 мин, что ли последний ? ) ЗЫ или в мире что-то поменялось пока я спал ![]() |
|||
|
||||
dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
GrayCardinal
Да проверил я это дело. tethereal + nc. Ты прав RST с виндовых машин не приходят (пробовал на ms.com и на одном компе дома), так же пробовал на Сане и Линуксе - RST приходит. Ну а интерес к вопросу лишь поднимается. Получается неудачный коннект к виндовой машине занимает в среднем больше времени, чем к машине с нормальной реализацией TCP? А Билли хитёр. Пробовал nmap'ить майкрософтовский сайт. Так вот сканирование connect()'ом заняло 50 секунд. А сканирование SYN'ами 70 секунд. PS Я тут подумал. Может это дело рук фаервола или еще чего нить что непосредственно попадается по пути? Видит что порт не открыт - вот и молчит в ответ. На твоих компах фаерволы были? На моем есть, но в данный момент нет возможность его отключить и проверить. Это сообщение отредактировал(а) dwr_budr - 1.12.2005, 10:04 |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
dwr_budr
Не-а. У меня без файрволчиков. И nmap с connect просто глохнет на первом же connect (хотя я, в основном, не nmap, а самопалкой, но смысл от этого не меняется). nmap - ить SYN'ами не пробовал. Однако той-же самопалкой сканер SYN'ами - не больше трех секунд для виндовой машины (если по локалке, на модеме дольше, конечно ![]() ЗЫ Билли сам себе могилу роет. Шо будет если адрес подделать и рассылать SYN якобы с его адреса, а ? Кранты ему будет вот что ![]() Это сообщение отредактировал(а) GrayCardinal - 1.12.2005, 12:39 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |