2015-07-21 43 views
1

我正在編寫一個簡單的程序,編寫在Python中,它嗅探即將到來的網絡數據包。然後,讓用戶使用添加的模塊,如DoS檢測或Ping預防。隨着嗅探器的幫助下,我可以得到傳入連接IP地址MAC地址協議標誌數據包內容。現在,我想要做的是添加一個新模塊,檢測發件人是否使用代理或不是,並根據它做一些事情。我搜索了可用於Python的方法,但找不到有用的方法。有多少種方法可以檢測代理的Python?Python - 如何檢測是否使用代理即將到來的連接

我的嗅探器代碼的部分是類似的東西:

..... 
sock = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, 8) 
while True: 
    packet = sock.recvfrom(2048) 
    ipheader = packet[0][14:34] 
    ip_hdr = struct.unpack("!8sB3s4s4s", ipheader) 
    sourceIP = socket.inet_ntoa(ip_hdr[3]) 
    tcpheader = packet[0][34:54] 
    tcp_hdr = struct.unpack("!HH9ss6s", tcpheader) 
    protoFlag = binascii.hexlify(tcp_hdr[3]) 
    ...... 

回答

0

首先,你的意思是傳入包。 其次,

從服務器TCP的角度來看,它連接到代理服務器,而不是下游客戶端。

因此,您的服務器無法識別是否存在與數據包有關的代理。但是,如果您處於應用程序級別(如http代理),則可能會有X-forwarded-for標頭可用,其中將存在原始客戶端IP。我說這可能是因爲代理服務器將決定是否將此標題發送給您。如果您期待傳入的http連接到您的服務器,您可以看看python的urllib2,但我不確定您是否可以使用此庫訪問X-forwarded-for

從文檔:

urllib2.urlopen(URL [,數據] [,超時])

...

此函數返回一個類文件對象具有兩個附加方法:

geturl() - 返回檢索資源的URL,通常用於確定是否遵循重定向

信息() - 返回頁面的元信息,如標題,在mimetools.Message實例的形式(見快速參考HTTP頭)

因此使用信息()將獲取頭。希望你在那裏找到你要找的東西。

+0

好的,除了那個嗅探器還有另外一種方法可以用來檢測Python代理嗎? – JustCode

+0

我編輯我的答案 – mid

0

沒有太多方法可以做到這一點,因爲代理/ VPN看起來像真正的流量。要添加到Mid說的內容,您可以查找標題和/或用戶代理,以幫助您確定用戶是使用代理還是VPN。

我知道的唯一免費解決方案是getIPIntel,它使用阻止列表,機器學習和統計信息來確定IP是否是代理/ VPN。

還有其他付費解決方案,如maxmind和阻止。

您需要做的是將API查詢發送到這些服務並解析結果。

+0

我打算創建一個模塊,首先檢查whatismyipaddress(http://whatismyipaddress.com/ip/),然後根據結果它將檢查該IP的大代理列表,但我唯一的擔心這是它的速度。你怎麼看待這件事?即使我使用線程,這些檢查可能會減慢我的工具? – JustCode

+0

Whatsmyipaddress並不準確。例如,查看兩個不同服務上的IP 104.255.227.xxx。此外,如果您製作的自動查詢數量太多,與用於自動查詢的GetIPIntel相比,whatsmyip地址可能會阻止您的自動查詢。 當然,查詢外部服務會導致速度減慢,但不應該那麼長。在你的最後做一些測試,看看它是否可以接受。 –

+0

是的,我用whatismyipaddress測試了一些代理地址,這些代理地址在web上的其他'最新'代理數據庫下列出,沒有用whatismyipaddress檢測到。這就是爲什麼我打算檢查與whatismyipaddress和GetIPIntel一起發現的所有數據庫。我認爲根據這些測試給予積分,然後使用這一點會更加成功。例如;一個IP從whatis獲得0.1,每個代理數據庫爲0.1。總分如0.7;將指出我將會被檢查。我想使用許多不同來源的原因是爲了使它更加準確。 – JustCode

相關問題