使用Python构造数据包
一、socket函数
1、socket函数参数及方法
1)参数
Python 中,用 socket()函数来创建套接字,语法格式如下
socket.socket([family[, type[, proto]]])
· family: 套接字家族可以使 AF_UNIX 或者 AF_INET。
· type: 套接字类型可以根据是面向连接的还是非连接分为 SOCK_STREAM 或 SOCK_DGRAM。
· protocol: 一般不填默认为 0。
https://gist.github.com/kevinkindom/108ffd675cb9253f8f71
2)方法
https://www.runoob.com/python/python-socket.html
2、TCP/UDP通讯
该方法自动补充MAC、IP、TCP包头,意味着我们需要填充的是包结构图中的 [ 数据 ]
1)send_udp_tcp.py
import argparse
import socket parser = argparse.ArgumentParser(description='Client')
parser.add_argument('--TCP_UDP', type=str, default='UDP')
parser.add_argument('--src_ip', type=str, default='172.16.200.1')
parser.add_argument('--dst_ip', type=str, default='172.16.200.2')
parser.add_argument('--dst_port', type=int, default=31500)
parser.add_argument('--send_times', type=int, default=10)
args = parser.parse_args()if args.TCP_UDP == 'UDP':s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# s.bind((args.src_ip,0)) # in windowss.setsockopt(socket.SOL_SOCKET, 25, 'ens3f0'.encode(encoding="utf-8")) # in linuxprint("now using:"+str(args.TCP_UDP))print("src_ip:"+str(args.src_ip))print("dst_ip:"+str(args.dst_ip))print("dst_port:"+str(args.dst_port))print("send_times"+str(args.send_times))print("send data begin")for i in range(args.send_times): s.sendto("test udp".encode(encoding="utf-8"), (args.dst_ip, args.dst_port)) print("send ok") s.close() elif args.TCP_UDP == 'TCP' : # TCP尚未测试print("now using:"+str(args.TCP_UDP))print("src_ip:"+str(args.src_ip))print("dst_ip:"+str(args.dst_ip))print("dst_port:"+str(args.dst_port))print("send_times"+str(args.send_times))print("send data begin")s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try:s.connect((args.dst_ip, args.dst_port)) except Exception:print("server port not connect!")for i in range(args.send_times):s.send('test tcp')print("send ok")s.close()else:print("error TCP/UDP type")
2)recv_udp_tcp.py
import argparse
import socket parser = argparse.ArgumentParser(description='Server')
parser.add_argument('--TCP_UDP', type=str, default='UDP')
parser.add_argument('--my_ip', type=str, default='172.16.200.2')
parser.add_argument('--my_port', type=int, default=31500)
args = parser.parse_args()if args.TCP_UDP == 'UDP':s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.bind((args.my_ip, args.my_port))print("now using:"+str(args.TCP_UDP))print("my_ip:"+str(args.my_ip))print("my_port:"+str(args.my_port))print("recv data begin")while True: data, addr = s.recvfrom(2048)datas = str(data,encoding='utf-8')print("received:" + datas + "\n")# print("received:" + data + "\nfrom:" + addr)s.close()elif args.TCP_UDP == 'TCP' : # TCP尚未测试s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((args.my_ip, args.my_port)) print("now using:"+str(args.TCP_UDP))print("my_ip:"+str(args.my_ip))print("my_port:"+str(args.my_port))print("recv data begin")s.listen(5)ss, addr = s.accept() # 被动接受TCP客户端连接,(阻塞式)等待连接的到来print('got connected from',addr)ra = ss.recv(512)print(ra)ss.close()s.close()else:print("error TCP/UDP type")
3、自行构造数据包
1)自行构造TCP部分及后面数据
意味着我们需要填充的是包结构图中的 [ TCP包头 | 数据 ]
需要使用RAW SOCKET 通信,AF_INET表示使用IPv4协议(自动补充以太网和IPv4部分),socket.SOCK_RAW指TCP及后面自行构造,NGA_TYPE指IPv4部分协议类型,6表示下一个部分为TCP,17表示下一个部分为UDP,一般自行构造NGA_TYPE=18
import socket s = socket.socket(socket.AF_INET, socket.SOCK_RAW, NGA_TYPE)
nga = struct.pack( # ngaa包头部分'!IbbIbI', # I 表示unsigned int(4byte), b表示signed char(1byte), !表示顺序解析worker_id,degree,0,aggindex,switch_id,sequence + pkt_id)
s.sendto(nga, (self.dst_ip, 0))
2)自行构造IP部分及以后
也即是说,需要填充的是上图中的 [ IP包头 | TCP包头 | 数据 ] 的内容
socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))
3)完全自行构造
意味着我们需要填充的是上图中的 [ MAC包头 | IP包头 | TCP包头 | 数据 ] 的内容
socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))
4、指定网卡
https://stackoverflow.com/questions/8437726/can-python-select-what-network-adapter-when-opening-a-socket
二、参考资料
https://www.cnblogs.com/JenningsMao/p/9487465.html
使用Python构造数据包相关推荐
- python构造数据包库_scapy构造数据包
一.进入scapy交互界面 在终端下输入:scapy ,进入交互界面: 二.查看scapy已经实现的网络协议 ls() 列出scapy中已实现的网络协议 ls(协议类型) 查看某个协议头部字段格式 l ...
- Python黑帽子编程—使用scapy构造数据包
用scapy构造数据包 小明和小红相互写信沟通,一封信就是一个IP包裹.但是我们这次想要搞点恶作剧,比如代小明给小红发消息,下面的payload里装的就是我们的消息. from scapy.all i ...
- python拦截数据包_使用Python进行TCP数据包注入(伪造)
数据包注入是对已经建立的网络连接通过构建任意协议(TCP...UDP...)然后用原始套接字发送的方式进行妨碍的过程,这种方法被广泛使用在网络渗透测试中,比如DDOS,端口扫描等. 一个数据包由IP头 ...
- python提取数据包中的文件_Python-对Pcap文件进行处理,获取指定TCP流
通过对TCP/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想 ...
- python分析数据包_Python解析pcap数据包
Post Views: 29,789 零.前言 历时数月,终于结束了考研初试,Blog也很长时间没有更新了,期间还是有些小伙伴来Blog看文章很是感动.以后一定会坚持更新,尽量给大家推送一些干货.这次 ...
- python网络数据包分析_Pyshark:使用了WirdShark的Python数据包解析工具(Tshark)
Pyshark Pyshark是一款针对tshark的Python封装器,在Pyshark的帮助下,广大研究人员可以使用wireshark的解析器来进行Python数据包解析.扩展文档:[Pyshar ...
- python实现——数据包分析
需求分析 工作中经常会碰到设备大量告警,收到成百上千的取证包,面对如此众多的数据包,如何确认这些取证包是不是正确告警的结果呢?只能打开数据包分析看有没有相关攻击特征.由此,可以使用snort进行检测, ...
- python拦截数据包_httphttps,python抓包知多少
原标题:http&https,python抓包知多少 在有些情景下,需要拦截所有的http包和https数据包,http包很好抓,但是https包相对比较复杂,在此文章中,主要介绍http和h ...
- python解析数据包_python – 解析UDP数据包
我正在构建一个UDP服务器来解析和验证传入的UDP数据包.我能够接收和解析数据包,但标头值不是我所期望的. 这是传入数据包的结构 包ID(4个字节) 包序列(4个字节) XOR密钥(2个字节) 数据包 ...
- python科学数据包-初识pandas
文章目录 1.pandas课程介绍 2.ipython开发环境搭建 3.numpy简介 4.pandas快速入门(一) pandas快速入门(二) pandas快速入门(三) 7.实例:MovieLe ...
最新文章
- 「SAP技术」MIGO 343 解冻物料库存的同时可以更改存储地点
- Java多线程专题一:并发所面临的问题
- Apache ZooKeeper - 集群中 Leader 的作用_事务的请求处理与调度分析
- 百度超级链XChain(6)XVM虚拟机
- Jenkins deploy to container部署war到tomcat(学习笔记十六)
- Nodejs实现WebSocket通信demo
- 操作系统学习(五) 、代码段和数据段描述符
- 高通驱动9008安装_高通snapdragon888的性能有多强大
- 算子基本思想_2.2 量子力学基本假设 Part 2
- 凭运气接来的项目,怎样凭本事搞砸?
- Visual Tracker Benchmark
- Window10下让自己开发的自启动程序支持拉起一个图形化软件
- 关于Mac升级系统后,出现 xcrun: error: invalid active developer path 问题的解决方案【已解决】
- vue-router 如何在新窗口打开页面
- 从《透视小邪医》谈玄幻修仙小说
- MyBatis 多对多关联映射
- MyBatis实现中间表关联查询
- 斐波拉契数列 java实现
- r语言 求几个数的最小公倍数_一课研究之“最小公倍数教学后学生知识技能情况分析”(20190417)...
- python获取kegg pathway map的信息
热门文章
- 刘强东的高调,给京东带来了流量,也给京东带来了灾难
- QQ快速登录的实现原理
- configure: error: --with-openssl was given but OpenSSL could not be detected 解决方法(Curl交叉编译到Arm板)
- 联想贺志强:联想专利其实很牛 只是你不知道
- 1.一个模型,帮你找到真正热爱的工作
- 信息学奥赛一本通 铲雪车
- python爬虫爬取糗百成人图片多线程版本
- kvm实战之搭建一个web服务来进行ks.cfg文件的引导(三)
- 【C++】交通咨询系统(最短路径问题)
- 【产品经理】003-梁宁·产品思维30讲-机会判断(未完待续)