python解析发往本机的数据包示例(解析数据包)

tcp.py

代码如下:

# -*- coding: cp936 -*-import socketfrom struct import *from time import ctime,sleepfrom os import system

system(‘title tcp sniffer’)system(‘color 05’)

# the public network interfacehost = socket.gethostbyname(socket.gethostname())

# create a raw socket and bind it to the public interfaces = socket.socket(socket.af_inet, socket.sock_raw, socket.ipproto_ip)s.bind((host, 0))

# include ip headerss.setsockopt(socket.ipproto_ip, socket.ip_hdrincl, 1)

# receive all packages#s.ioctl(socket.sio_rcvall, socket.rcvall_on)

# receive a packagewhile 1==1: packet = s.recvfrom(65565) packet = packet[0]

ip_header = packet[0:20] iph = unpack(‘!bbhhhbbh4s4s’,ip_header) version = iph[0] >> 4 #version ihl = iph[0] * 0xf #ihl iph_length = ihl * 4 #total length ttl = iph[5] protocol = iph[6] s_addr = socket.inet_ntoa(iph[8]) d_addr = socket.inet_ntoa(iph[9]) print ctime() print ‘version : ‘ + str(version) + ‘ ihl : ‘ + str(ihl) + ‘ total length: ‘+str(iph_length) + ‘ ttl : ‘ +str(ttl) + ‘ protocol : ‘ + str(protocol) + ‘ source address : ‘ + str(s_addr) + ‘ destination address : ‘ + str(d_addr)

if protocol == 6: tcp_header = packet[20:40] tcph = unpack(‘!hhllbbhhh’ , tcp_header) source_port = tcph[0] dest_port = tcph[1] sequence = tcph[2] acknowledgement = tcph[3] doff_reserved = tcph[4] tcph_length = doff_reserved >> 4 print ‘source port : ‘ + str(source_port) + ‘ dest port : ‘ + str(dest_port) + ‘ sequence number : ‘ + str(sequence) + ‘ acknowledgement : ‘ + str(acknowledgement) + ‘ tcp header length : ‘ + str(tcph_length)

data = packet[40:len(packet)] print ‘data : ‘ + data

# disabled promiscuous modes.ioctl(socket.sio_rcvall, socket.rcvall_off)

udp.py

代码如下:

# -*- coding: cp936 -*-import socketfrom struct import *from time import ctime,sleepfrom os import system

system(‘title udp sniffer’)system(‘color 05’)# the public network interfacehost = socket.gethostbyname(socket.gethostname())

# create a raw socket and bind it to the public interfaces = socket.socket(socket.af_inet, socket.sock_raw, socket.ipproto_ip)s.bind((host, 0))

# include ip headerss.setsockopt(socket.ipproto_ip, socket.ip_hdrincl, 1)

# receive all packages#s.ioctl(socket.sio_rcvall, socket.rcvall_on)

# receive a packagewhile 1==1: packet = s.recvfrom(65565) packet = packet[0]

ip_header = packet[0:20] iph = unpack(‘!bbhhhbbh4s4s’,ip_header) version = iph[0] >> 4 #version ihl = iph[0] * 0xf #ihl iph_length = ihl * 4 #total length ttl = iph[5] protocol = iph[6] s_addr = socket.inet_ntoa(iph[8]) d_addr = socket.inet_ntoa(iph[9])

if protocol == 17: udp_header = packet[20:28] udph = unpack(‘!hhhh’ , udp_header) source_port = udph[0] dest_port = udph[1] length = udph[2] checksum = udph[3] data = packet[28:len(packet)] print ctime() print ‘version : ‘ + str(version) + ‘ ihl : ‘ + str(ihl) + ‘ total length: ‘+str(iph_length) + ‘ ttl : ‘ +str(ttl) + ‘ protocol : ‘ + str(protocol) + ‘ source address : ‘ + str(s_addr) + ‘ destination address : ‘ + str(d_addr) print ‘source port : ‘ + str(source_port) + ‘ dest port : ‘ + str(dest_port) + ‘ length : ‘ + str(length) + ‘ checksum : ‘ + str(checksum) print ‘data : ‘ + data

# disabled promiscuous modes.ioctl(socket.sio_rcvall, socket.rcvall_off)

Posted in 未分类