python写windows抓包工具, 直接使用windows api

主要使用python自带的ctypes和wintypes进行类型转换和交互

# python 3.11.7
import ctypes
from ctypes import wintypes
import inspect
import socketdef log(data):print("----------------log start---------------")try:for attr, value in inspect.getmembers(data):if not attr.startswith('__') and not attr.startswith('_'):print(f"{attr}: {value}")except Exception:print(Exception)print("----------------log end---------------")# 引入dll
winsock2 = ctypes.WinDLL('ws2_32', use_last_error=True)# 开启 WSAStartup
wintypes.MAX_LEN = 256
class WSADATA(ctypes.Structure):_fields_ = [('wVersion', wintypes.WORD),('wHighVersion', wintypes.WORD),('iMaxSockets', wintypes.WORD),('iMaxUdpDg', wintypes.WORD),('lpVendorInfo', wintypes.LPSTR),('szDescription', wintypes.CHAR * (wintypes.MAX_LEN + 1)),('szSystemStatus', wintypes.CHAR * (wintypes.MAX_LEN + 1)),]wsaData = WSADATA()
errno = winsock2.WSAStartup(0x0202, ctypes.pointer(wsaData))
if errno != 0:print('WSAStartup: ' + str(errno))print(winsock2.WSAGetLastError())exit()log(wsaData)# 创建 socket
AF_INET = 2
SOCK_RAW = 3
IPPROTO_IP = 0
raw_socket = winsock2.socket(AF_INET, SOCK_RAW, IPPROTO_IP)
if raw_socket == 0:print('socket: ' + str(errno))print(winsock2.WSAGetLastError())exit()print(raw_socket)# 设置允许接收ip头
IP_HDRINCL = 2
enable = ctypes.c_char_p(1)
winsock2.setsockopt(raw_socket, IPPROTO_IP, IP_HDRINCL, ctypes.pointer(enable), ctypes.sizeof(enable))# 绑定监听的ip
class InAddr(ctypes.Structure):_fields_ = [('s_addr', wintypes.UINT),]class SockAddrIn(ctypes.Structure):_fields_ = [('sin_family', wintypes.SHORT),('sin_port', wintypes.USHORT),('sin_addr', InAddr),('sin_zero', wintypes.CHAR * 8),]hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
ip_bytes = socket.inet_aton(ip)inAddr = InAddr()
inAddr.s_addr = ctypes.c_uint.from_buffer_copy(ip_bytes)sockAddrIn = SockAddrIn()
sockAddrIn.sin_family = AF_INET
sockAddrIn.sin_port = 0
sockAddrIn.sin_addr = inAddrerrno = winsock2.bind(raw_socket, ctypes.pointer(sockAddrIn), ctypes.sizeof(SockAddrIn))
if errno != 0:print('bind: ' + str(errno))print(winsock2.WSAGetLastError())exit()# 设置混杂模式
SIO_RCVALL = 0x98000001 # 2550136833
SIO_RCVALL_ON = ctypes.c_ulong(0x00000001)errno = winsock2.ioctlsocket(raw_socket, SIO_RCVALL, ctypes.pointer(SIO_RCVALL_ON),
)
if errno != 0:print('WSAIoctl: ' + str(errno))print(winsock2.WSAGetLastError())exit()print('成功开启')
# 开始接收数据
while True:try:buf = (wintypes.CHAR * 4096)()resCount = winsock2.recv(raw_socket, buf, 4096, 0)if resCount != -1:print(resCount)except Exception as e:print(e)# 0	    WSAE_SUCCESS	操作成功。
# 10004	WSAE_INTR	操作被中断。
# 10009	WSAEBADF	文件描述符无效。
# 10013	WSAEACCES	权限不足。
# 10014	WSAEFAULT	地址无效。
# 10022	WSAEINVAL	参数无效。
# 10024	WSAEMFILE	打开文件过多。
# 10035	WSAEWOULDBLOCK	资源暂时不可用(非阻塞操作)。
# 10036	WSAEINPROGRESS	操作正在进行中。
# 10037	WSAEALREADY	操作已经在进行中。
# 10038	WSAENOTSOCK	描述符不是套接字。
# 10039	WSAEDESTADDRREQ	需要目标地址。
# 10040	WSAEMSGSIZE	消息太大。
# 10041	WSAEPROTOTYPE	协议类型不正确。
# 10042	WSAENOPROTOOPT	选项对于协议不适用。
# 10043	WSAEPROTONOSUPPORT	协议未支持。
# 10044	WSAESOCKTNOSUPPORT	套接字类型不支持。
# 10045	WSAEOPNOTSUPP	操作不支持。
# 10046	WSAEPFNOSUPPORT	协议族不支持。
# 10047	WSAEAFNOSUPPORT	地址族不支持。
# 10048	WSAEADDRINUSE	地址已在使用。
# 10049	WSAEADDRNOTAVAIL	地址不可用。
# 10050	WSAENETDOWN	网络不可达。
# 10051	WSAENETUNREACH	网络不可达。
# 10052	WSAENETRESET	网络连接重置。
# 10053	WSAECONNABORTED	连接已中止。
# 10054	WSAECONNRESET	连接已重置。
# 10055	WSAENOBUFS	缓冲区空间不足。
# 10056	WSAEISCONN	套接字已连接。
# 10057	WSAENOTCONN	套接字未连接。
# 10058	WSAESHUTDOWN	无法发送或接收数据,因为套接字已被关闭。
# 10059	WSAETOOMANYREFS	太多引用。
# 10060	WSAETIMEDOUT	连接超时。
# 10061	WSAECONNREFUSED	连接被拒绝。
# 10062	WSAELOOP	无法解析主机名。
# 10063	WSAENAMETOOLONG	主机名太长。
# 10064	WSAEHOSTDOWN	主机不可达。
# 10065	WSAEHOSTUNREACH	主机不可达。
# 10066	WSAENOTEMPTY	目录不为空。
# 10067	WSAEPROCLIM	进程限制。
# 10068	WSAEUSERS	用户数量限制。
# 10069	WSAEDQUOT	磁盘配额超出。
# 10070	WSAESTALE	文件句柄过期。
# 10071	WSAEREMOTE	项目不在本地计算机上。
# 10091	WSAEDISCON	连接被优雅地断开。
# 10092	WSAENOMORE	没有更多记录。
# 10093	WSAECANCELLED	操作被取消。
# 10101	WSAEINVALIDPROCTABLE	无效的过程表。
# 10102	WSAEINVALIDPROVIDER	无效的服务提供者。
# 10103	WSAEPROVFAILEDINIT	服务提供者初始化失败。
# 10104	WSAEASYNCFAIL	异步过程调用失败。
# 10105	WSAEASYNCNOTSUPPORTED	不支持异步。
# 10106	WSAENOTINITIALISED	Winsock 库未初始化。
# 10107	WSAESTRUCT	结构体无效。
# 10108	WSAEBADSTRUCT	结构体无效。
# 10109	WSAEADDRINUSE	地址已在使用。
# 10110	WSAEADDRNOTAVAIL	地址不可用。
# 10111	WSAENETDOWN	网络不可达。
# 10112	WSAENETUNREACH	网络不可达。
# 10113	WSAENETRESET	网络连接重置。
# 10114	WSAECONNABORTED	连接已中止。
# 10115	WSAECONNRESET	连接已重置。
# 10116	WSAENOBUFS	缓冲区空间不足。
# 10117	WSAEISCONN	套接字已连接。
# 10118	WSAENOTCONN	套接字未连接。
# 10119	WSAESHUTDOWN	无法发送或接收数据,因为套接字已被关闭。
# 10120	WSAETOOMANYREFS	太多引用。
# 10121	WSAETIMEDOUT	连接超时。
# 10122	WSAECONNREFUSED	连接被拒绝。
# 10123	WSAELOOP	无法解析主机名。
# 10124	WSAENAMETOOLONG	主机名太长。
# 10125	WSAEHOSTDOWN	主机不可达。
# 10126	WSAEHOSTUNREACH	主机不可达。
# 10127	WSAENOTEMPTY	目录不为空。
# 10128	WSAEPROCLIM	进程限制。
# 10129	WSAEUSERS	用户数量限制。
# 10130	WSAEDQUOT	磁盘配额超出。
# 10131	WSAESTALE	文件句柄过期。
# 10132	WSAEREMOTE	项目不在本地计算机上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上) 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下) 文章目录 系列文章目录前言一、ArkTS基本介绍1、 ArkTS组成2、组件参数和属性2.1、区…

YOLOV8 OpenCV + usb 相机 实时识别

1 OpenCV 读相机 import cv2cap cv2.VideoCapture(0) while (1):# get a frameret, frame cap.read()# show a framecv2.imshow("capture", frame)if cv2.waitKey(1) & 0xFF ord(q):# cv2.imwrite("/opt/code/image/fangjian2.jpeg", frame)#passb…

Linux基础知识-1

Linux和Windows最大差异:目录。在Windows中,磁盘是被分成了很多区的,比如C盘,D盘,不同的文件放在不同的盘下面。下图为Windows的磁盘管理,可以看到磁盘0被划分为了不同的区域,C盘,D盘等&#xf…

[深度学习]Pytorch框架

1 深度学习简介 应用领域:语音交互、文本处理、计算机视觉、深度学习、人机交互、知识图谱、分析处理、问题求解2 发展历史 1956年人工智能元年2016年国内开始关注深度学习2017年出现Transformer框架2018年Bert和GPT出现2022年,chatGPT出现,进入AIGC发展阶段3 PyTorch框架简…

2024 年 CSS 终于增加了垂直居中特性,效率翻倍!

在 2024 年的Chrome 123 版本中&#xff0c; CSS 原生可以使用 1 个 CSS 属性 align-content: center进行垂直居中。 有何魅力&#xff1f; 这个特性的魅力在哪儿呢&#xff1f;我举例给你看一下 <div style"align-content:center; height:200px; background: #614e…

计算机网络:物理层 --- 基本概念、编码与调制

目录 一. 物理层的基本概念 二. 数据通信系统的模型 三. 编码 3.1 基本概念 3.2 不归零制编码 3.3 归零制编码 3.4 曼切斯特编码 3.5 差分曼切斯特编码 ​编辑 四. 调制 4.1 调幅 4.2 调频 4.3 调相 4.4 混合调制 今天我们讲的是物理…

影刀RPA实战:网页爬虫之携程酒店数据

1.实战目标 大家对于携程并不陌生&#xff0c;我们出行定机票&#xff0c;住酒店&#xff0c;去旅游胜地游玩&#xff0c;都离不开这样一个综合性的网站为我们提供信息&#xff0c;同时&#xff0c;如果你也是做旅游的公司&#xff0c;那携程就是一个业界竞争对手&#xff0c;…

[Spring]Spring MVC 请求和响应及用到的注解

文章目录 一. Maven二. SpringBoot三. Spring MVC四. MVC注解1. RequestMapping2. RequestParam3. PathVariable4. RequestPart5. CookieValue6. SessionAttribute7. RequestHeader8. RestController9. ResponseBody 五. 请求六. 响应 一. Maven Maven是⼀个项⽬管理⼯具。基于…

Python | Leetcode Python题解之第421题数组中两个数的最大异或值

题目&#xff1a; 题解&#xff1a; class Trie:def __init__(self):# 左子树指向表示 0 的子节点self.left None# 右子树指向表示 1 的子节点self.right Noneclass Solution:def findMaximumXOR(self, nums: List[int]) -> int:# 字典树的根节点root Trie()# 最高位的二…

Java基础知识扫盲

目录 Arrays.sort的底层实现 BigDecimal(double)和BigDecimal(String)有什么区别 Char可以存储一个汉字吗 Java中的Timer定时调度任务是咋实现的 Java中的序列化机制是咋实现的 Java中的注解是干嘛的 Arrays.sort的底层实现 Arrays.sort是Java中提供的对数组进行排序的…

LabVIEW编程能力如何能突飞猛进

要想让LabVIEW编程能力实现突飞猛进&#xff0c;需要采取系统化的学习方法&#xff0c;并结合实际项目进行不断的实践。以下是一些提高LabVIEW编程能力的关键策略&#xff1a; 1. 扎实掌握基础 LabVIEW的编程本质与其他编程语言不同&#xff0c;它是基于图形化的编程方式&…

使用 UWA Gears 定位游戏内存问题

UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台&#xff0c;提供了实时监测和截帧分析功能&#xff0c;帮助您精准定位性能热点&#xff0c;提升应用的整体表现。 内存不足、内存泄漏和过度使用等问题&#xff0c;常常导致游戏出现卡顿、崩溃&#xff0c;甚至影响…

CSS | 如何来避免 FOUC(无样式内容闪烁)现象的发生?

一、什么是 FOUC(无样式内容闪烁)? ‌FOUC&#xff08;Flash of Unstyled Content&#xff09;是指网页在加载过程中&#xff0c;由于CSS样式加载延迟或加载顺序不当&#xff0c;导致页面出现闪烁或呈现出未样式化的内容的现象。‌ 这种现象通常发生在HTML文档已经加载&…

Redis数据结构之哈希表

这里的哈希表说的是value的类型是哈希表 一.相关命令 1.hset key field value 一次可以设置多个 返回值是设置成功的个数 注意&#xff0c;哈希表中的键值对&#xff0c;键是唯一的而值可以重复 所以有下面的结果&#xff1a; key中原来已经有了f1&#xff0c;所以再使用hse…

RTSP学习

RTSP基本原理 实时流传输协议(RTSP:RealTimeStreaming Protocol1)是一种网络传输协议,旨在发送低延迟流。 该协议由RealNetworks,Netscape和哥伦比亚大学的专家在1996年开发。它定义了应如何打包流中的数据以进行传输。 类似一个控制命令的协议play teardown 负责音视频的数据…

二叉树(Java)

一.1.树形结构概念的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a;…

大模型培训讲师叶梓:Llama Factory 微调模型实战分享提纲

LLaMA-Factory ——一个高效、易用的大模型训练与微调平台。它支持多种预训练模型&#xff0c;并且提供了丰富的训练算法&#xff0c;包括增量预训练、多模态指令监督微调、奖励模型训练等。 LLaMA-Factory的优势在于其简单易用的界面和强大的功能。用户可以在不编写任何代码的…

【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField

前言&#xff1a; 上篇博客我们讲到redis五大基本数据类型&#xff08;也是就下图的第一列&#xff09;。 【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客文章浏览阅读1k次&#xff0c;点赞24次&#xff0c;收藏10次。该篇适用于速成redis。本篇我们将讲解&#…

Leetcode 2246. 相邻字符不同的最长路径(一般树)树形dp C++实现

问题&#xff1a;Leetcode 2246. 相邻字符不同的最长路径 给你一棵 树&#xff08;即一个连通、无向、无环图&#xff09;&#xff0c;根节点是节点 0 &#xff0c;这棵树由编号从 0 到 n - 1 的 n 个节点组成。用下标从 0 开始、长度为 n 的数组 parent 来表示这棵树&#x…