這是我第一次使用原始套接字(是的,我需要使用它們,因爲我必須修改網絡標頭內的字段),並且我所閱讀的所有文檔或教程都描述了一個嗅探數據包的解決方案,但這不完全是我需要。我需要創建一個攔截數據包的腳本,對其進行處理並將其發送到目的地,即數據包不應到達目的地,除非我的腳本決定這樣做。我可以使用原始套接字攔截網絡數據包嗎(不僅是嗅探)?
爲了學習,我創建了一個小型原型,它檢測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")
有人能解釋我如何能實現我的目標或指向我正確的文件?