python用socket解析数据包的问题

问题描述

python用socket解析数据包的问题

用python做个抓包工具,下面有写代码不明白,请老师指点一下.

 while True:
    packet = s.recvfrom(65565)
    packet = packet[0]
    ip_header = packet[0:20]
    iph = unpack('!BBHHHBBH4s4s' , ip_header) 

    version_ihl = iph[0]
    version = version_ihl >> 4
    ihl = version_ihl & 0xF
    iph_length = ihl * 4
    ttl = iph[5]
    protocol = iph[6]
    s_addr = socket.inet_ntoa(iph[8]);
    d_addr = socket.inet_ntoa(iph[9]);

问题1:这里面的iph = unpack('!BBHHHBBH4s4s' , ip_header)是什么意思,必须是BBHHHBBH4s4s吗?

问题2:version = version_ihl >> 4是什么意思? '>>'是什么符号?

问题3:ihl = version_ihl & 0xF是什么意思?

问题4:s_addr = socket.inet_ntoa(iph[8])是转换ip的吗?
本人初学python,没有分数,请各位老师不吝赐教,万分感激.

解决方案

unpack是按包格式协议来解析对我。

是移位操作。
&是取最后四位
获取转换IP地址

时间: 2024-12-28 23:22:31

python用socket解析数据包的问题的相关文章

关于socket udp 数据包传输时间的问题

问题描述 关于socket udp 数据包传输时间的问题 两台计算机型号和千兆以太网卡全部相同,其中一台计算机作为服务器端,另一台作为客户端,两者通过socket建立连接(udp连接),客户端单次向服务器端发送一百万数据包(每个数据包大小为1024字节),服务器端只接收不回应,则共耗时15秒左右,但若设置服务器端将每次接收到的数据包再原路传输回去,客户端发送一个数据包,再接收到一个数据包,则客户端发送一百万包的时间为650秒,请问两者的时间为什么相差这么大? 解决方案 socket之udp传输

Socket接收数据包

问题描述 我用socket接收数据,发送端发送了2000个字节的数据包,但是服务器接收数据包的时候接收的是两个被分开的数据包,但是这两个数据包的总和加起来是4973.后来我在大神的指导下,能接受一个完整的数据包,但是接收的这个数据包长度还是4973个.请问这是什么原因?谢谢 解决方案 解决方案二:最好不要发送太大的数据包解决方案三:从你的问题看不出问题出在哪里.你可以在我贴出的一个例子的基础上做扩展和封装.在这个底层没有必要自己写.解决方案四:tcp发送的数据的大小,根据你的业务信令具体的实例而

python解析发往本机的数据包示例 (解析数据包)_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())

C#实现的多线程异步Socket数据包接收器框架

几天前在博问中看到一个C# Socket问题,就想到笔者2004年做的一个省级交通流量接收服务器项目,当时的基本求如下: 接收自动观测设备通过无线网卡.Internet和Socket上报的交通量数据包 全年365*24运行的自动观测设备5分钟上报一次观测数据,每笔记录约2K大小 规划全省将有100个左右的自动观测设备(截止2008年10月还只有30个) 当时,VS2003才发布年多,笔者也是接触C#不久.于是Google了国内国外网,希望找点应用C#解决Socket通信问题的思路和代码.最后,找

如何在NMM中查看socket数据包里的收发数据?

问题描述 msnetworkmonitor3.3中,能抓取socket的数据包,但是如何确定哪些信息属于收发的实际信息?谢谢先. 解决方案 解决方案二:图示里的REMDATA就是原始数据?

网络数据包捕获函数库Libpcap安装与使用(非常强大)

1.Libpcap简介 Libpcap是Packet Capture Libray的英文缩写,即数据包捕获函数库.该库提供的C函数接口用于捕捉经过指定网络接口的数据包,该接口应该是被设为混杂模式.这个在原始套接子中有提到. 著名的软件TCPDUMP就是在Libpcap的基础上开发而成的.Libpcap提供的接口函数实现和封装了与数据包截获有关的过程. Libpcap提供了用户级别的网络数据包捕获接口,并充分考虑到应用程序的可移植性.Libpcap可以在绝大多数Linux平台上运行.在Window

.Net开发中TCP反向代理、Socket 连接池和数据包解析器教程

TCP反向代理 一般的Web反向代理大家很熟悉了,主要是通过在客户端和服务端之间架设一层代理服务器,转发客户端的请求至服务端或数据库,并将结果回复给客户端. 其特点主要有: 1.缓存一些数据库I/O过重.却更新不频繁的数据,或者静态数据,如文件.图片等.2.隔离客户端(公网)和服务端(windows服务.Web服务.文件服务),仅将反向代理服务器的IP.名称.host和端口等暴露给公网.3.基于第2点,其应该是轻量的.可随时重启的,这在服务端自身所在的服务器重启代价较高或不能忍受重启的条件下,极

python基础教程之获取本机ip数据包示例_python

这几天用到了raw socket,用python写了些demo程序,这里记录下. 首先我们看一个简单的sniffer程序: 复制代码 代码如下: #! /usr/bin/python# code for linuximport socket#s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.I

在linux下,python怎么才能抓到网卡上的所有TCP数据包?

问题描述 在linux下,python怎么才能抓到网卡上的所有TCP数据包? 网卡已经设置为混杂模式,能够收到mac不是本机mac的数据包,但是程序只能收到和本机ip一样的数据包,不能收到和本机ip不一样的数据包,求助.代码如下: sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) packet_base = sock.recvfrom(1024)[0] print "receive a packet