Raw-Сокеты. Как получить текст сообщений?

lera98

Наваял слушатель на rawсокетах, слушаю нет сенд, результат передачи двух разных сообщений:
len=00000030, iph: 30000045004035AC8D3906808100000A8500000A970C8B006CD57E20077A64BB
FFFF127000009135B40504020204010100000000
len=0000002C, iph: 2C000045004036AC903906808100000A8500000A970C8B006DD57E204F7A64BB
B7FF1850000048E00000008200000000
len=0000004F, iph: 4F000045004037AC6C3906808100000A8500000A970C8B0071D57E208D7A64BB
79FF18500000684523000000424D53FF000000D000000000000000000000000000000000000000000000000000000000
len=00000028, iph: 28000045004038AC923906808100000A8500000A970C8B0098D57E208E7A64BB
79FF11500000286200000000

len=00000030, iph: 3000004500403AAC883906808100000A8500000A980C8B0009AB79060780FC40
FFFF1270000060EEB40504020204010100000000
len=0000002C, iph: 2C00004500403BAC8B3906808100000A8500000A980C8B000AAB79064F80FC40
B7FF1850000018990000008200000000
len=0000004F, iph: 4F00004500403CAC673906808100000A8500000A980C8B000EAB79068E80FC40
78FF1850000037FE23000000424D53FF000000D000000000000000000000000000000000000000000000000000000000
len=00000028, iph: 2800004500403DAC8D3906808100000A8500000A980C8B0035AB79068F80FC40
78FF11500000F81A00000000
Почему не видно самих текстов сообщений?
Из-за того, что создавая сокет, я указал семейство AF_INET, а не AF_NETBIOS и поэтому не все пакеты ловятся?
Неужели на каждый тип пакетов мне нужен отдельный сокет? Как бы обойтись одним?
Или NetBios пакеты имеют внешний НЕ-IP заголовок? (Я фильтровал по IP-адресу)

lera98

Хмм... Придётся на wasm'е спросить.
Пробовал AF_UNSPEC и IPPROTO_RAW фигня ещё хуже.

Aleksei66

а то что у тебя в hexe данные валятся, так это я переводить не умею

lera98

Так заголовки для этого есть.
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 +---------------+-----------------------------------------------+
И не забыть ещё при чтении переворачивать порядок в двордах.
Насчёт хекса - так это же самый удобный вид представления произвольных данных.

sergey_m

Напиши функцию, которая печатает поля пакета. Может быть и сам разберешься.

Aleksei66

я отлично знаю заголовки TCP/IP
но у тебя вывод такой форматированый, что пиздец, мне лично читать очень тяжело
тем более (см твой первый пост) где ты в хексе хочешь увидеть само сообщение?

evgen5555

Читаем внимательнее - чуве говорит:
>Наваял слушатель на rawсокетах, слушаю нет сенд
С чего он взял, что NetBIOS - это именно то, что ходит внутри RAW-пакетов, не совсем понятно. Просто, наверное, слова услышал и кидает понты.

Aleksei66

примерно о том же - пусть лучше возмет tcpdump и не парится

Aleksei66

да, кстати
>И не забыть ещё при чтении переворачивать порядок в двордах.
htonl(3)
ntohl(3)

lera98

2 Glebius:
зачем, ведь итак печатается _всё_ содержимое пакета, а по заголовкам ориентироваться можно сносно. Функция-то есть, printf называется, написать со \n и %08X нетрудно, но зачем?
2Anonymous():
Если знаешь заголовки, то переводить умеешь. Вроде логично.
(про порядок байт - забей, я грешным делом подумал, что ты не знаешь; был неправ...)
2:
Понты не гоню, вопрос серьёзный, а не "на понт". Про NetBios мне сказал Outpost Firewall, поэтому и упомянул нетбиос. Сейчас слухач ловит пакеты от меня наружу и обратно, но я не уверен, что все. И досадно, что он не ловит сообщения самому себе.

sergey_m

Почему не видно самих текстов сообщений?
Каких текстов каких сообщений? Ты предполагаешь, что ты не весь пакет видишь? Тогда сравни заявленную длину в заголовке IP с тем, что ты считал. Заодно посмотрим насколько удобно тебе хекс читать
Из-за того, что создавая сокет, я указал семейство AF_INET, а не AF_NETBIOS и поэтому не все пакеты ловятся?
Неужели на каждый тип пакетов мне нужен отдельный сокет? Как бы обойтись одним?
Под какой операционной системой ты это делаешь? Покажи последовательность системных вызовов с параметрами с помощью которых ты ловишь пакеты. (только не надо нам показывать всю свою программу).
Или NetBios пакеты имеют внешний НЕ-IP заголовок? (Я фильтровал по IP-адресу)
Бывает NetBIOS over IP, а бывает over IPX. Может еще какой бывает...

lera98

> Каких текстов каких сообщений?
Посылал (вроде) тексты "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.

evgen5555

>Посылал (вроде) тексты "2" и "22".
В новом стандарте могли добавить сжатие LZW, так что проверь ещо разок

lera98

А ты видишь эти тексты? Чёто не вижу хекса 0x32..

evgen5555

>А ты видишь эти тексты? Чёто не вижу хекса 0x32..
Они в графическом формате, наверное
Ты какие-нибудь документы по NetBIOS/RPC читал?

lera98

Усиленно штудирую эту тему в поиске ответа. Много информации.
От знающих форумчан ответ, наверно, в порядки быстрее получить можно и в компактном виде.

sergey_m

Ответ уже был дан. Воспользуйся готовой программой - tcpdump. Убедись, что в NetBIOS не всегда идут данные plain text.

lera98

Tcpdump не пойдёт. У меня винда.
Можно Winpcup и windump установить, но я вроде в плане прослушки именно это и пытаюсь закодить самостоятельно.
Да ничего страшного, если не прямым текстом сообщение передаётся.
Я не уверен, что поймал ВСЁ, касающееся сообщения нет сенда.
И как мне поймать сообщение самому себе? На адрес 127.0.0.1 пробовал повесить сокет, там ошибка bind'a и Ioctl'а. На адрес INADDR_ANY вообще не хочет такой сокет вешаться.

evgen5555

А зачем ты, собственно к RAW-сокетам прицепился?

Dasar

> Tcpdump не пойдёт.
Возьми любой другой sniffer.
Их, в том числе,и под windows - как грязи.

lera98

Потому что ipfilter hook driver имхо сложнее писать.
Да и опыт равсокетов пригодится.

sergey_m

Можно Winpcup и windump установить, но я вроде в плане прослушки именно это и пытаюсь закодить самостоятельно.
Вот установи их, для самоконтроля.
Я не уверен, что поймал ВСЁ, касающееся сообщения нет сенда.
Еще раз: ты проконтролировал длину заявленную в заголовке IP с длиной считанного пакета?

lera98

Да, эти длины одинаковы. Я про другое - все ли пакеты я поймал? В этом я сомневаюсь.
ЗЫ: вот системный и мой равсокеты (инфа от Аутпоста):
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)
Оставить комментарий
Имя или ник:
Комментарий: