#python #networking #tcp #packet #packet-sniffers
Вопрос:
следуя учебнику, я закодировал Wi-Fi-сниффер на python, используя сокеты (в linux) и пакет «структура». Код разделен на две части: первая декодирует пакеты заголовков Ipv4, получающие Ip-адреса и другую информацию, а затем отправляет оставшиеся данные во вторую часть, которая декодирует пакеты ICMP, UDP и TCP. Когда я декодирую пакеты TCP и UDP, я могу легко получить порты источника и порты назначения, флаги и т. Д… но сейчас я ищу имя хоста. Другими словами, я пытаюсь увидеть, какой веб-сайт посещает отправитель/получатель пакета.
Как я могу получить имя хоста? Находится ли он в части «данные» пакета tcp/udp, если да, то как его декодировать? Должен ли я смотреть на порты источника и назначения?
Вот код: 2 функции для пакетов UDP/TCP, аргументом данных является часть «данные» из пакета Ipv4.
def tcp_segment(data):
(src_port, dest_port, sequence, acknowledgement, offset_reserved_flags) = struct.unpack('! H H L L H', data[:14])
offset = (offset_reserved_flags >> 12) * 4
flag_urg = (offset_reserved_flags amp; 32) >> 5
flag_ack = (offset_reserved_flags amp; 16) >> 4
flag_psh = (offset_reserved_flags amp; 8) >> 3
flag_rst = (offset_reserved_flags amp; 4) >> 2
flag_syn = (offset_reserved_flags amp; 2) >> 1
flag_fin = offset_reserved_flags amp; 1
return src_port, dest_port, sequence, acknowledgement, flag_urg, flag_ack, flag_psh, flag_rst, flag_syn, flag_fin, data[offset:]
def udp_segment(data):
src_port, dest_port, size = struct.unpack('! H H 2x H', data[:8])
return src_port, dest_port, size, data[8:]
Комментарии:
1. Имя хоста будет указано только в заголовке HTTP. В других протоколах этого нет.
2. Заголовок http находится в пакете TCP, не так ли? Как я могу узнать реальное место назначения UDP? IP-адресатом всегда будет маршрутизатор… нет?
3. Реальный адрес назначения-это IP-адрес назначения в IP-заголовке. Трафик в одной и той же сети не проходит через маршрутизатор. Маршрутизаторы маршрутизируют пакеты между сетями на основе IP-адреса назначения. Любые пакеты с адресом маршрутизатора в качестве IP-адреса назначения предназначены для самого маршрутизатора.