需要联调的程序,沟通联调起来总是各种麻烦,如果自己能写个简单一点的“测试机”,事情就很easy了;或者有时候想做“中间人”,看看网路上到底传些什么。前面写了串口的测试机,今天尝试了一下UDP的。

importsocketfrom struct import *s=socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)whileTrue:

packet= s.recvfrom(65565)

packet=packet[0]

ip_header= packet[0:20]

iph= unpack('!BBHHHBBH4s4s', ip_header)

version_ihl=iph[0]

version= version_ihl >> 4ihl= version_ihl & 0xfttl= iph[5]

protocol= iph[6]

s_addr= socket.inet_ntoa(iph[8])

d_addr= socket.inet_ntoa(iph[9])print '---> src_addr:'+s_addr+',dst_addr:'+d_addr

udp_header= packet[20:28]

udph= unpack('!HHHH', udp_header)

s_port=udph[0]

d_port= udph[1]

data_length= udph[3]print 'src_port:'+str(s_port)+',dst_port:'+str(d_port)

简单做一下注释:

1. raw_socket,字面理解是“裸”套接字,这个“裸”对应用编程人员来说就是,未经过解析的。

2. recvfrom(length),注意,这里的参数是缓存区的大小,并不是port。因为我们在这里recvfrom()到的,是本机所有的UDP datagram(tcp使用IPPROTO_TCP,ICMP使用IPPROTO_ICMP)。

3. recvfrom的返回是一个tuple,类似下面:

("E \x00x\xcc\xfc\x00\x000\x06j%J}G\x13\xc0\xa8\x01\x06\x01\xbb\xa3\xdc\x0b\xbeI\xbf\x1aF[\x83P\x18\xff\xff\x88\xf6\x00\x00\x17\x03\x01\x00\x1c\xbbT\xb3\x07}\xb0\xedqE\x1e\xe7;-\x03\x9bU\xb7\xb1r\xd2\x9e]\xa1\xb8\xac\xa4V\x9a\x17\x03\x01\x00*\xed\x1f\xda\xa4##Qe\x9a\xe9\xd6\xadN\xf4\x9b\xc4\xf0C'\x01\xc4\x82\xdb\xb2\x8d(\xa5\xd0\x06\x95\x13WO\x0f\x8e\x1c\xa6f\x1d\xdf\xe1x", ('74.125.71.19', 0))

4. unpack是struct包中的函数,format字符串的含义在这里有解释。如:‘!’表示big-endian,也可以使用‘>’代替;‘H’表示unsigned short。

另一个,截取TCP包的代码,IP头部分与上面udp解析一样:

tcp_header = packet[20:40]#now unpack them :)

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)

h_size= ihl * 4 + tcph_length * 4data_size= len(packet) -h_size#get data from the packet

data =packet[data_size:]print 'Data :' + data

另外,此方法还支持PF_PACKET,所以可以直接用来抓取以太网数据(只有x-nix系统支持PF_PACKET,所以,windows系统还得使用wpcap)。

想要抓取经过自己网卡的所有数据包,需要网卡进入“promiscuous mode”。有两种方法:手动“ifconfig eth0 promisc”打开;使用ioctl,修改socket的配置"ifr.ifr_flags |= IFF_PROMISC"。

data.encode("hex")

python开发的网络调试助手_用python来调试网络程序相关推荐

  1. python开发出来的crm系统_用Python打造一个CRM系统(二)

    在上一篇中介绍了CRM和Django,在本篇中将聊聊Django的最佳实践. 总的来说就是遵循Django的设计理念:松耦合.代码精简.快速开发.DRY.明确优于隐式.一致性等.下面从开发环境.项目组 ...

  2. python开发实践教程 于京_《Python开发实践教程》于京、宋伟 著著【摘要 书评 在线阅读】-苏宁易购图书...

    前言 第一章 通过求三角形面积步入Python程序世界 案例1-1 求三角形面积 导读 知识梳理与扩展 小结 练习一 第二章 常用运算.使用自定义函数 案例2-1 用函数的方法计算三角形面积 导读 案 ...

  3. python开发一个复杂的网站_用Python的SimPy库简化复杂的编程模型的介绍

    在我遇到 SimPy 包的其中一位创始人 Klaus Miller 时,从他那里知道了这个包.Miller 博士阅读过几篇提出使用 Python 2.2+ 生成器实现半协同例程和"轻便&qu ...

  4. python开发对电脑配置要求_学python最电脑配置有要求么

    python对于电脑硬件基本没什么要求,下载python安装程序的时候,注意看下自己电脑属性是64位系统还是32位系统,再下载对应的python安装程序. 单纯学Python的话普通电脑就ok了,机器 ...

  5. python 游戏辅助lol_绝地助手_(Python基础教程之八)Python中的list操作

    服务器软件大扫盲彩虹六号辅助有序 索引(索引从0最先) 易变的 异构的(列表中的项目不必是统一类型) 写为方括号之间的逗号分开值列表 listOfSubjects = ['physics', 'che ...

  6. python开发微信小游戏大全_【python】用python玩微信跳一跳小游戏

    Python微信跳一跳实验报告 Step 1 准备工具:一台安卓手机,Windows10,python3,adb驱动,依赖的各种python库 Step 2 PiP安装:下面列出需要安装的库: bac ...

  7. 如何确定python开发环境已经配置好_搭建 python 开发环境 前面安装选位置我直接回车了现在我想测试查看目录该怎么办...

    展开全部 1 ubuntu中一般安装e5a48de588b662616964757a686964616f31333431343036后的默认路径如下#!/usr/bin/env python #!/u ...

  8. python开发出来的crm系统_用Python打造一个CRM系统(三)

    在上一篇中我们基于cookiecutter-django创建了一个one_crm的项目,在本文中将在本地进行初始化,并成功运行起来. 本地初始化之前先确保环境先安装了Python3.8.Postgre ...

  9. python开发的游戏手机上玩_利用Python开发游戏脚本,就凭一个设定,玩家直接起飞!...

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

最新文章

  1. PyTorch | (2)PyTorch 入门-张量
  2. access sql 取余_计算机二级ACCESS模拟题库2016最新
  3. 网站搭建从零开始(六) WordPress的基本配置
  4. Android应用程序开发环境的建立
  5. Linux 进程控制相关函数
  6. 推荐几款好用的CRM
  7. IDEA修改主题颜色,只需要四步
  8. vi/vim怎么对多行文字进行注释/取消注释
  9. python 1加到100的三种方法
  10. iText实现pdf添加文字水印
  11. sd内存卡 a1 a2 区别
  12. java线程栅栏_java 线程栅栏
  13. 用c语言,制作一个心形彩色告白图案(附源码)
  14. 李宏毅——终身学习lifelong learning
  15. html的标题题记有哪些,关于温暖的题记唯美
  16. HTML外边框塌陷什么意思,html如何解决高度塌陷问题
  17. 服务IP(VIP)的作用
  18. 动态Probit模型及Stata实现
  19. linux开发板访问u盘
  20. 卸载命令行安装的ActivePerl

热门文章

  1. HEVC与VP9之间的对比
  2. 转载 双语:中国姓氏英文翻译对照大合集
  3. 二级导航栏(html、css)
  4. 手机尾数看你的恋爱期限
  5. 面试题总结(2018.7.26开始,持续更新中)
  6. Python中Pyinstaller使用方法
  7. android代码控制微信,Android转战微信小程序 - vscode安装和配置
  8. Android 自定义控件属性
  9. word中给汉字注音
  10. 数学建模——运输问题(Python实现)