Raw-Сокеты. Как получить текст сообщений?
Пробовал AF_UNSPEC и IPPROTO_RAW фигня ещё хуже.
а то что у тебя в hexe данные валятся, так это я переводить не умею
IP:И не забыть ещё при чтении переворачивать порядок в двордах.
POS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F E D C B A 9 8 7 6 5 4 3 2 1 0 F E D C B A 9 8 7 6 5 4 3 2 1 0
00h +-------------------------------+---------------+-------+-------+
| Total Length |Type of Service| IHL |Version|
04h +-------------------------+-----+---------------+-------+-------+
| |Flags| |
| | N | |
| Fragment Offset | O | Identification |
| | F | |
08h +-------------------------+-----+---------------+---------------+
| Header Checksum | Protocol | Time to Live |
0Ch +-------------------------------+---------------+---------------+
| Source Address |
10h +---------------------------------------------------------------+
| Destination Address |
14h +---------------+-----------------------------------------------+
| Padding | Options |
18h +---------------+-----------------------------------------------+
TCP:
POS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F E D C B A 9 8 7 6 5 4 3 2 1 0 F E D C B A 9 8 7 6 5 4 3 2 1 0
00h +-------------------------------+-------------------------------+
| Destination Port | Source Port |
04h +-------------------------------+-------------------------------+
| Sequence Number |
08h +---------------------------------------------------------------+
| Acknowledgment Number |
0Ch +-------------------------------+-+-+-+-+-+-+-----------+-------+
| |F|S|R|P|A|U| | Data |
| Window |I|Y|S|S|C|R| Reserved | Offset|
| |N|N|T|H|K|G| | |
10h +-------------------------------+-+-+-+-+-+-+-----------+-------+
| Urgent Pointer | Checksum |
14h +---------------+---------------+-------------------------------+
| Padding | Options |
18h +---------------+-----------------------------------------------+
Насчёт хекса - так это же самый удобный вид представления произвольных данных.
Напиши функцию, которая печатает поля пакета. Может быть и сам разберешься.
но у тебя вывод такой форматированый, что пиздец, мне лично читать очень тяжело
тем более (см твой первый пост) где ты в хексе хочешь увидеть само сообщение?
>Наваял слушатель на rawсокетах, слушаю нет сенд
С чего он взял, что NetBIOS - это именно то, что ходит внутри RAW-пакетов, не совсем понятно. Просто, наверное, слова услышал и кидает понты.
примерно о том же - пусть лучше возмет tcpdump и не парится
>И не забыть ещё при чтении переворачивать порядок в двордах.
htonl(3)
ntohl(3)
зачем, ведь итак печатается _всё_ содержимое пакета, а по заголовкам ориентироваться можно сносно. Функция-то есть, printf называется, написать со \n и %08X нетрудно, но зачем?
2Anonymous():
Если знаешь заголовки, то переводить умеешь. Вроде логично.
(про порядок байт - забей, я грешным делом подумал, что ты не знаешь; был неправ...)
2:
Понты не гоню, вопрос серьёзный, а не "на понт". Про NetBios мне сказал Outpost Firewall, поэтому и упомянул нетбиос. Сейчас слухач ловит пакеты от меня наружу и обратно, но я не уверен, что все. И досадно, что он не ловит сообщения самому себе.
Почему не видно самих текстов сообщений?Каких текстов каких сообщений? Ты предполагаешь, что ты не весь пакет видишь? Тогда сравни заявленную длину в заголовке IP с тем, что ты считал. Заодно посмотрим насколько удобно тебе хекс читать
Из-за того, что создавая сокет, я указал семейство AF_INET, а не AF_NETBIOS и поэтому не все пакеты ловятся?Под какой операционной системой ты это делаешь? Покажи последовательность системных вызовов с параметрами с помощью которых ты ловишь пакеты. (только не надо нам показывать всю свою программу).
Неужели на каждый тип пакетов мне нужен отдельный сокет? Как бы обойтись одним?
Или NetBios пакеты имеют внешний НЕ-IP заголовок? (Я фильтровал по IP-адресу)Бывает NetBIOS over IP, а бывает over IPX. Может еще какой бывает...
Посылал (вроде) тексты "2" и "22".
> Ты предполагаешь, что ты не весь пакет видишь?
Вижу весь пакет, но все ли пакеты, связанные с нет сендом?
> Под какой операционной системой ты это делаешь?
Виндовоз ХР.
> ...последовательность системных вызовов...
WSAStartup
s=socket(AF_INET, SOCK_RAW, IPPROTO_IP)
bind - семейство AF_INET, порт 0, адрес моего хоста
WSAIoctl(s , SIO_RCVALL, ...)
в цикле: from_len=recv(s, , , 0)
closesocket(s)
WSACleanup
> NetBIOS ... бывает over IPX
Какой заголовок у IPX? Для IPX пакетов будет нужен отдельный сокет?
Сейчас пороюсь в своих доках насчёт IPX.
В новом стандарте могли добавить сжатие LZW, так что проверь ещо разок
А ты видишь эти тексты? Чёто не вижу хекса 0x32..
Они в графическом формате, наверное
Ты какие-нибудь документы по NetBIOS/RPC читал?
От знающих форумчан ответ, наверно, в порядки быстрее получить можно и в компактном виде.
Ответ уже был дан. Воспользуйся готовой программой - tcpdump. Убедись, что в NetBIOS не всегда идут данные plain text.
Можно Winpcup и windump установить, но я вроде в плане прослушки именно это и пытаюсь закодить самостоятельно.
Да ничего страшного, если не прямым текстом сообщение передаётся.
Я не уверен, что поймал ВСЁ, касающееся сообщения нет сенда.
И как мне поймать сообщение самому себе? На адрес 127.0.0.1 пробовал повесить сокет, там ошибка bind'a и Ioctl'а. На адрес INADDR_ANY вообще не хочет такой сокет вешаться.
А зачем ты, собственно к RAW-сокетам прицепился?
Возьми любой другой sniffer.
Их, в том числе,и под windows - как грязи.
Да и опыт равсокетов пригодится.
Можно Winpcup и windump установить, но я вроде в плане прослушки именно это и пытаюсь закодить самостоятельно.Вот установи их, для самоконтроля.
Я не уверен, что поймал ВСЁ, касающееся сообщения нет сенда.Еще раз: ты проконтролировал длину заявленную в заголовке IP с длиной считанного пакета?
ЗЫ: вот системный и мой равсокеты (инфа от Аутпоста):
SYSTEM localhost:any 0 RAWSOCKET 02.04.2005 10:34:25 3 day(s) 6 hour(s) 40 min(s) 25 sec(s)
RAWSOCK.EXE local:10.0.0.133 0 RAWSOCKET 17:20:09 20 sec(s)
Оставить комментарий
lera98
Наваял слушатель на rawсокетах, слушаю нет сенд, результат передачи двух разных сообщений:Почему не видно самих текстов сообщений?
Из-за того, что создавая сокет, я указал семейство AF_INET, а не AF_NETBIOS и поэтому не все пакеты ловятся?
Неужели на каждый тип пакетов мне нужен отдельный сокет? Как бы обойтись одним?
Или NetBios пакеты имеют внешний НЕ-IP заголовок? (Я фильтровал по IP-адресу)