【发布时间】:2016-08-12 20:38:09
【问题描述】:
这是我第一次使用原始套接字(是的,我需要使用它们,因为我必须修改网络头中的一个字段)并且我阅读的所有文档或教程都描述了一种嗅探数据包的解决方案,但这并不完全是我需要。我需要创建一个脚本来拦截数据包,对其进行处理并将其进一步发送到目的地,即除非我的脚本决定,否则数据包不应到达目的地。
为了学习,我创建了一个小型原型,它检测 ping 并仅打印“PING”。我希望 ping 在我拦截数据包时不起作用,并且我不包含将它们发送到目的地的逻辑。然而 ping 正在工作(再次,它似乎只是在嗅探/镜像数据包)。我的目标是 ping 数据包被“困”在我的脚本中,我不知道该怎么做。这就是我在当前 python 脚本中所做的(为了简单起见,我避免写我如何进行解码)
sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0003))
sock.bind((eth0, 0))
packet = sock.recvfrom(65565)
decode_eth(packet)
decode_ip(packet)
if (ipheader.ip_proto == 1):
print("\nPING")
谁能解释我怎样才能实现我的目标或为我指出正确的文档?
【问题讨论】:
标签: linux sockets networking