从特定客户端 UDP 捕获数据包 (Python)

2024-02-23

我有一个关于嗅探来自特定客户端的数据包的问题。我正在运行一个非常简单的 UDP 服务器,如下所示:

from socket import *

IPv4 = ""
Port = 54345

ServerSock = socket(AF_INET, SOCK_DGRAM) # UDP
ServerSock.bind((IPv4, Port))
print "Socket is ready to receive data.."

while True:
    data, addr = ServerSock.recvfrom(1024) # buffer size is 1024 bytes
    print data

我打算捕获到达端口号(54345)的每个数据包并解析其标头值。我认为如果将数据包保存到 .pcap 文件并可能使用 scapy 来处理它们是可行的,但是是否可以使用“socket.recvfrom”处理每个数据包到达后的情况?谢谢


你已经得到了数据。然而,你得到的是 UDP 数据包和源地址;如果您想要完整的原始数据包(带有 IPv4 和 UDP 标头),那就不同了。

在某些平台上,您可以将普通的 UDP 套接字设置为IP_HDRINCL,或者还有其他等价物。如果你这样做,每个recvfrom将在数据中包含标题,因此您已经获得了所需的一切。

在其他平台上,您可以使用SOCK_RAW代替SOCK_DGRAM。您可以使用原始套接字执行的操作差异很大。在许多 Unix 平台上,您可以使用IPPROTO_UDP with SOCK_RAW, 进而bind到普通的 UDP 地址和端口,尽管可能存在限制,并且它们在每个平台上都不同。例如,在 OS X 上,您必须是 root 才能创建原始套接字,并且只能将原始套接字绑定到单接口地址(意味着不能''/INADDR_ANY/'0.0.0.0')。如果您搜索“SOCK_RAW Python”和“SOCK_RAW”,您应该能够找到您需要的内容。 (最后一个例子套接字模块文档 http://docs.python.org/2/library/socket.html显示如何在 Windows 上使用原始套接字。)

获得数据后,将其保存到pcap文件并不难。该格式记录在Libpcap 文件格式 http://wiki.wireshark.org/Development/LibpcapFileFormat在 Wireshark 维基百科上。如果您熟悉 stdlibstructmodule,应该很容易弄清楚如何编写这种格式。这是一个简短的示例:

pcap_hdr = struct.pack('=IHHiIII',
                       0xa1b2c3d4, # magic number
                       2, 4,       # pcap 2.4 format
                       0,          # UTC timezone for timestamps
                       0,          # "in practice, all tools set it to 0"
                       65535,      # max packet length
                       228)        # LINKTYPE_IPV4, or maybe you want LINKTYPE_RAW
pcapfile.write(pcap_hdr)

如果您不想自己这样做,我没有任何使用库编写 pcap 文件的经验,但是scapy将是我第一个看的地方,然后是python-libpcap http://sourceforge.net/projects/pylibpcap/绑定为libpcap http://www.tcpdump.org//WinPcap http://www.winpcap.org/。如果这些都不起作用,请检查 PyPI。

如果所有这些听起来超出您的能力,您可能不想这样做。只需运行您的 UDP 服务器,并使用 Wireshark 捕获发送给它的所有数据包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从特定客户端 UDP 捕获数据包 (Python) 的相关文章

随机推荐

  • Swift -Ounchecked 和断言

    Preface 在斯威夫特中 ENABLE NS ASSERTIONS被忽略 断言是打开还是关闭取决于SWIFT OPTIMIZATION LEVEL 浏览此处获取更多信息 http blog krzyzanowskim com 2015
  • 两个多边形的最近点

    我有两个多边形 我想获得最小距离 并测量该距离之间的点 当然 这样的点很可能位于两个节点之间的边缘 这是一个例子 我正在寻找一种算法 可以给我绿色距离和两个点 如果多边形不相交 您可以这样做 如果有多边形 A 和多边形 B 则 A i 和
  • 在 wget 或curl 查询中使用通配符

    从目录下载时是否可以在 wget 查询中使用通配符 基本上 我有一个网站 www download example com dir version package rpm 然而 版本目录一直在变化 有时包含多个RPM包 是否有一个 wget
  • 如何在有可用空间(如密度扫描仪)的 pdf 上插入图像或图章

    我有一个 pdf 文件 我在其中的所有页面上添加了图章 但是 问题是 图章被添加到每个页面的左上角 如果页面的该部分有文本 则标记会出现在文本上 我的问题是 有什么方法可以阅读每一页 如果该部分没有文本 请添加图章 否则搜索最近的可用可用空
  • onCreateOptionsMenu(Menu 菜单) 和 onPrepareOptionsMenu(Menu 菜单) 有什么区别?

    解释一下之间的区别onCreateOptionsMenu Menu menu and onPrepareOptionsMenu Menu menu onCreateOptionsMenu 被调用一次 onPrepareOptionsMenu
  • 如何在同一个组件中初始化和使用上下文?

    我有一个名为 SortContext 的上下文 我想做的是初始化这个上下文 创建它的提供者 然后在同一个组件中使用该上下文 这可能吗 例如 export default function MyComponent children const
  • 连接两个 numpy 矩阵

    如果你有两个 numpy 矩阵 如何将它们连接在一起 它们应该水平连接 以便 0 1 0 1 1 0 1 0 4 1 4 1 0 1 0 1 例如 对于这些矩阵 gt gt type X gt gt type Y gt gt X shape
  • Swift 可以将类/结构数据转换为字典吗?

    例如 class Test var name String var age Int var height Double func convertToDict gt String AnyObject let test Test test na
  • React 使表格可点击并编辑详细信息

    如何使表格行可单击以编辑和更新详细信息 我正在从 pouchdb 检索这些详细信息 我将部分代码粘贴到下面以供您评估 this state docs this db this props db componentDidMount this
  • 计算图像中圆心的坐标

    假设我有这张图像 我想得到 X Y 中每个圆的中心 MatLab 有没有算法可以做到这一点 只需拨打一次电话即可实现区域属性 http www mathworks nl help images ref regionprops html im
  • Django:检查模板中ManyToMany字段的值

    我的 Django 应用程序中有以下模型 class Group models model name models CharField max length 30 users Models ManyToManyField User 在我的模
  • 是否可以阻止远程脚本在 iframe 内加载?

    我正在动态创建 iframe 并且我想阻止不是源自 iframe 来源的脚本 这可能吗 通过 JavaScript jQuery 例如 如果我的页面加载 iframeexample com内容 我想要example com要运行的脚本 但我
  • 关于函数声明中的函数指针

    include
  • 以不同(非 root)用户身份从 PHP 运行 shell 脚本

    我正在尝试在 Ubuntu 服务器上从 PHP 运行非特权用户拥有的 shell 脚本 权限问题使得运行它exec 不切实际 因为它是www data正在运行它 我用谷歌搜索了一下 发现对 suExec 的各种引用 对于这么小的问题来说 这
  • 测试 Selenium 的 onbeforeunload 事件

    我正在尝试为网页编写一个 Selenium 测试 该测试使用 onbeforeunload 事件在离开之前提示用户 Selenium 似乎无法识别出现的确认对话框 或者提供点击 确定 或 取消 的方法 有什么办法可以做到这一点吗 我正在使用
  • 最重要的常量和右值引用

    在 C 03 中 您可以使用const 将临时变量的生命周期延长到引用的生命周期的技巧 或 最重要的常量 我的问题是 在 C 0x 中 这种行为是否扩展到右值引用 IEauto x someFunction 根据 class tempora
  • 有没有办法强制 Google Speech api 仅返回单词作为响应?

    我正在使用谷歌这个API language code key 我的密钥 用于语音识别 并且效果非常好 问题在于数字 即如果我说one two three four结果将是1234如果我说one thousand two hundred th
  • ARKit:如何通过 hitTest 命中 SCNNode?

    我有几架飞机被 ARKit 检测到并对用户可见 我希望用户能够单击屏幕 以便仅保留他选择的平面 更改其颜色并删除其他平面 我的飞机被添加到 didAddNode 委托方法中 如下所示 Plane plane Plane alloc init
  • Scala 中的集合和 toArray

    Java代码 Collection
  • 从特定客户端 UDP 捕获数据包 (Python)

    我有一个关于嗅探来自特定客户端的数据包的问题 我正在运行一个非常简单的 UDP 服务器 如下所示 from socket import IPv4 Port 54345 ServerSock socket AF INET SOCK DGRAM