一、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构造数据包相关推荐

  1. python构造数据包库_scapy构造数据包

    一.进入scapy交互界面 在终端下输入:scapy ,进入交互界面: 二.查看scapy已经实现的网络协议 ls() 列出scapy中已实现的网络协议 ls(协议类型) 查看某个协议头部字段格式 l ...

  2. Python黑帽子编程—使用scapy构造数据包

    用scapy构造数据包 小明和小红相互写信沟通,一封信就是一个IP包裹.但是我们这次想要搞点恶作剧,比如代小明给小红发消息,下面的payload里装的就是我们的消息. from scapy.all i ...

  3. python拦截数据包_使用Python进行TCP数据包注入(伪造)

    数据包注入是对已经建立的网络连接通过构建任意协议(TCP...UDP...)然后用原始套接字发送的方式进行妨碍的过程,这种方法被广泛使用在网络渗透测试中,比如DDOS,端口扫描等. 一个数据包由IP头 ...

  4. python提取数据包中的文件_Python-对Pcap文件进行处理,获取指定TCP流

    通过对TCP/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想 ...

  5. python分析数据包_Python解析pcap数据包

    Post Views: 29,789 零.前言 历时数月,终于结束了考研初试,Blog也很长时间没有更新了,期间还是有些小伙伴来Blog看文章很是感动.以后一定会坚持更新,尽量给大家推送一些干货.这次 ...

  6. python网络数据包分析_Pyshark:使用了WirdShark的Python数据包解析工具(Tshark)

    Pyshark Pyshark是一款针对tshark的Python封装器,在Pyshark的帮助下,广大研究人员可以使用wireshark的解析器来进行Python数据包解析.扩展文档:[Pyshar ...

  7. python实现——数据包分析

    需求分析 工作中经常会碰到设备大量告警,收到成百上千的取证包,面对如此众多的数据包,如何确认这些取证包是不是正确告警的结果呢?只能打开数据包分析看有没有相关攻击特征.由此,可以使用snort进行检测, ...

  8. python拦截数据包_httphttps,python抓包知多少

    原标题:http&https,python抓包知多少 在有些情景下,需要拦截所有的http包和https数据包,http包很好抓,但是https包相对比较复杂,在此文章中,主要介绍http和h ...

  9. python解析数据包_python – 解析UDP数据包

    我正在构建一个UDP服务器来解析和验证传入的UDP数据包.我能够接收和解析数据包,但标头值不是我所期望的. 这是传入数据包的结构 包ID(4个字节) 包序列(4个字节) XOR密钥(2个字节) 数据包 ...

  10. python科学数据包-初识pandas

    文章目录 1.pandas课程介绍 2.ipython开发环境搭建 3.numpy简介 4.pandas快速入门(一) pandas快速入门(二) pandas快速入门(三) 7.实例:MovieLe ...

最新文章

  1. 「SAP技术」MIGO 343 解冻物料库存的同时可以更改存储地点
  2. Java多线程专题一:并发所面临的问题
  3. Apache ZooKeeper - 集群中 Leader 的作用_事务的请求处理与调度分析
  4. 百度超级链XChain(6)XVM虚拟机
  5. Jenkins deploy to container部署war到tomcat(学习笔记十六)
  6. Nodejs实现WebSocket通信demo
  7. 操作系统学习(五) 、代码段和数据段描述符
  8. 高通驱动9008安装_高通snapdragon888的性能有多强大
  9. 算子基本思想_2.2 量子力学基本假设 Part 2
  10. 凭运气接来的项目,怎样凭本事搞砸?
  11. Visual Tracker Benchmark
  12. Window10下让自己开发的自启动程序支持拉起一个图形化软件
  13. 关于Mac升级系统后,出现 xcrun: error: invalid active developer path 问题的解决方案【已解决】
  14. vue-router 如何在新窗口打开页面
  15. 从《透视小邪医》谈玄幻修仙小说
  16. MyBatis 多对多关联映射
  17. MyBatis实现中间表关联查询
  18. 斐波拉契数列 java实现
  19. r语言 求几个数的最小公倍数_一课研究之“最小公倍数教学后学生知识技能情况分析”(20190417)...
  20. python获取kegg pathway map的信息

热门文章

  1. 刘强东的高调,给京东带来了流量,也给京东带来了灾难
  2. QQ快速登录的实现原理
  3. configure: error: --with-openssl was given but OpenSSL could not be detected 解决方法(Curl交叉编译到Arm板)
  4. 联想贺志强:联想专利其实很牛 只是你不知道
  5. 1.一个模型,帮你找到真正热爱的工作
  6. 信息学奥赛一本通 铲雪车
  7. python爬虫爬取糗百成人图片多线程版本
  8. kvm实战之搭建一个web服务来进行ks.cfg文件的引导(三)
  9. 【C++】交通咨询系统(最短路径问题)
  10. 【产品经理】003-梁宁·产品思维30讲-机会判断(未完待续)