簡體   English   中英

Scapy:發現已知源 ip 時發出警報

[英]Scapy: Alerting when known source ip found

問題

我正在嘗試用 python 編寫一個腳本來嗅探網絡上的每個數據包。 我對 Scapy 相當陌生,但我已經閱讀了一些關於sniff函數的文章,尤其是它的參數prn
我發現使用具有指定countsniff功能將捕獲那么多數據包。 並且prn參數允許我對捕獲的每個數據包運行自定義函數。 利用這些知識,我編寫了以下代碼。

代碼

#!/usr/bin/python3

from scapy.all import *

whitelist_src = []

def alert_me(pkt):
    if IP in pkt:
        ip_src=pkt[IP].src
        ip_dst=pkt[IP].dst

    with open('uniq_sources.txt') as f:
        for line in f:
            line = line.rstrip('\n')
            whitelist_src.append(line)
        
    if ip_src in whitelist_src:
            print("We found a match.\n")

sniff(filter="ip", prn=alert_me, count=100)

期待

當在 whitelist_src 中找到 ip 時,我期待以下輸出:

We found a match.

不幸的是,我收到了這些錯誤,我無法理解它們。

錯誤

Traceback (most recent call last):
  File "./alert_me.py", line 20, in <module>
    sniff(filter="ip", prn=alert_me, count=100)
  File "/home/me/.local/lib/python3.8/site-packages/scapy/sendrecv.py", line 1036, in sniff
    sniffer._run(*args, **kwargs)
  File "/home/me/.local/lib/python3.8/site-packages/scapy/sendrecv.py", line 906, in _run
    sniff_sockets[L2socket(type=ETH_P_ALL, iface=iface,
  File "/home/me/.local/lib/python3.8/site-packages/scapy/arch/linux.py", line 398, in __init__
    self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))  # noqa: E501
  File "/usr/lib/python3.8/socket.py", line 231, in __init__
    _socket.socket.__init__(self, family, type, proto, fileno)
PermissionError: [Errno 1] Operation not permitted

我也在用 python 學習。 我希望我提供了適當數量的信息。

您的代碼看起來不錯,但調用sniff函數需要 root 權限。 這就是引發異常的原因。 以 root 身份調用腳本應該可以解決問題。

編輯 附帶說明一下,我不知道這是不是有意為之,但是每次您收到數據包時,您的whitelist_src都會隨着文本文件中的 IP 增長。 此外,每次收到數據包時打開和讀取文件也很耗時。 因此,我建議將您的with語句移到alert_me函數之外。 當然,如果您的文本文件可以在您的腳本運行時更新,這將不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM