一、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. centos安装pg以及pg配置ssl
  2. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
  3. Java社区领袖介绍平台支持选项
  4. 博弈论-囚徒困境与重复囚徒困境的启示
  5. 保鲜、保生,生鲜电商的两码事
  6. R开发(part7)--环境空间
  7. 第一个Android程序
  8. 校招刷题---java选择题笔记01
  9. linearLayout和二级菜单联动
  10. Cadence安装教程(亲测记录)
  11. iOS 手势操作:拖动、捏合、旋转、点按、长按、轻扫、自定义
  12. 数据库连接报错代码-08S01
  13. Failed to introspect Class
  14. Linux 系统查询处理器架构
  15. 数据库如何备份与恢复
  16. Java 关于中文乱码问题的解决方案与经验(转)
  17. 手机拍照技巧:全景拍摄,让手机拍出的照片妙趣横生
  18. svhost占用内存过高
  19. pcb 理论阻值、 过孔_高速PCB单端过孔研究超详细过程
  20. 数据库中decimal

热门文章

  1. html语言中网页主体标记是,HTML 网页主体标记
  2. MySQL区分大小写
  3. 原 sublime text 批量删除空白行
  4. 训练神经网络电脑自动重启
  5. 二层交换机与路由器的区别
  6. 【JY】浅析消能附加阻尼比
  7. 10分钟让你掌握Linux常用命令(+2万+++收藏)
  8. 1's Complement和2's Complement的区别
  9. 【大数据】城市公交网络分析与可视化(二):获取公交行驶路径并绘制散点图
  10. 数据库原理与应用~第三版课后习题答案(何玉洁 编著)