Разбор данных для сниффера - SPSE python cert - PullRequest
0 голосов
/ 12 февраля 2020

Я пытался понять эти методы парсинга данных из анализатора.

Например, базовый код извлекает заголовки IP с помощью преобразования "! 9s1s2s4s4s"

#!/usr/bin/env python

import socket
import struct
import binascii
global IP, TCP, UDP, HTTP

IP, TCP, UDP, HTTP = False, False, False, False

def parseIP(header):

    global TCP, UDP

    ip_hdr = struct.unpack("!9s1s2s4s4s", header)

    source = socket.inet_ntoa(ip_hdr[3])

    dest = socket.inet_ntoa(ip_hdr[4])

    print "\nIP"

    print "-Source:\t ", source

    print "-Dest:\t\t ", dest

    if binascii.hexlify(ip_hdr[1]) == '06':
        TCP = True

    elif binascii.hexlify(ip_hdr[1]) == '11':
        UDP = True


rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x800))


while True:

    pkt = rawSocket.recvfrom(2048)

    print "Received packet:"

    parseETH(pkt[0][0:14])

    if IP:

        parseIP(pkt[0][14:34])

С другой стороны, есть другие способы распаковки ('! BBHHHBBH4s4s', заголовок). Я ясно, что последние 4s4s являются адресом источника и назначения, но я не вижу омологации для 9s1s2s и BBHHHBBH, так как я считаю байты заголовка IP, но не вижу 9s1s2s.

...