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

本文介绍了如何使用Python解析发往本机的TCP和UDP数据包。通过创建原始套接字并绑定到公共接口,获取IP头和协议头信息,展示源端口、目的端口、序列号等关键数据。
摘要由CSDN通过智能技术生成

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)

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

TAG标签:解析数据包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值