这是我第一次使用原始套接字(是的,我需要使用它们,因为我必须修改网络标头内的字段),并且我所阅读的所有文档或教程都描述了一个嗅探数据包的解决方案,但这不完全是我需要。我需要创建一个拦截数据包的脚本,对其进行处理并将其发送到目的地,即数据包不应到达目的地,除非我的脚本决定这样做。我可以使用原始套接字拦截网络数据包吗(不仅是嗅探)?
为了学习,我创建了一个小型原型,它检测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")
有人能解释我如何能实现我的目标或指向我正确的文件?