欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-11-02 20:09:34
tcp.py 复制代码 代码如下:# -*- coding: cp936 -*-import socketfrom struct import *from time imp...

tcp.py

复制代码 代码如下:

# -*- coding: cp936 -*-
import socket
from struct import *
from time import ctime,sleep
from os import system

system('title tcp sniffer')
system('color 05')

# the public network interface
host = socket.gethostbyname(socket.gethostname())

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

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

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

# receive a package
while 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 mode
s.ioctl(socket.sio_rcvall, socket.rcvall_off)

udp.py

复制代码 代码如下:

# -*- coding: cp936 -*-
import socket
from struct import *
from time import ctime,sleep
from os import system

system('title udp sniffer')
system('color 05')
# the public network interface
host = socket.gethostbyname(socket.gethostname())

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

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

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

# receive a package
while 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 mode
s.ioctl(socket.sio_rcvall, socket.rcvall_off)