gpt4 book ai didi

python - 将原始 IP 数据写入接口(interface) (linux)

转载 作者:太空狗 更新时间:2023-10-29 11:46:11 25 4
gpt4 key购买 nike

我有一个包含二进制形式的原始 IP 数据包的文件。文件中的数据包含完整的 IP header 、TCP\UDP header 和数据。我想使用任何语言(最好是 python)来读取这个文件并将数据转储到行上。

在 Linux 中,我知道您可以直接写入某些设备(echo "DATA">/dev/device_handle)。使用 python 在/dev/eth1 上打开是否会达到相同的效果(即我可以 echo "DATA">/dev/eth1)

最佳答案

类似于:

#!/usr/bin/env python
import socket
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
s.bind(("ethX", 0))

blocksize = 100;
with open('filename.txt') as fh:
while True:
block = fh.read(blocksize)
if block == "": break #EOF
s.send(block)

应该可以,但是还没有测试过。

  • ethX 需要更改为您的接口(interface)(例如 eth1eth2wlan1 等)
  • 您可能想尝试一下 blocksize。一次 100 字节应该没问题,您可以考虑增加,但我会保持在 1500 字节以太网 PDU 以下。
  • 您可能需要 root/sudoer 权限才能执行此操作。我以前在从原始套接字读取数据时需要它们,但从未尝试过简单地写入一个套接字。
  • 前提是您确实将数据包(并且只有数据包)转储到文件中。也不是任何类型的编码(例如十六进制)。如果一个字节是 0x30,它在你的文本文件中应该是“0”,而不是“0x30”、“30”或类似的东西。如果不是这种情况,您需要用一些处理替换 while 循环,但 send 仍然相同。
  • 由于我刚刚了解到您正在尝试发送 IP 数据包——在这种情况下,您也可能需要立即构建整个数据包,然后将其推送到套接字。简单的 while 循环是不够的。

关于python - 将原始 IP 数据写入接口(interface) (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com