2013-08-04 72 views
1

我正在嘗試使用球拍偵聽移動通過我的機器上的端口80的數據包。然而,我似乎正在陷入困境,要麼我理解數據包嗅探器的工作原理,要麼理解Racket的工作原理,要麼理解這兩者。如何使用球拍偵聽數據包?

這是我的代碼(大部分來自Racket's Wikipedia entry)。

#lang racket 

(require racket/tcp) 

(define listener (tcp-listen 80)) 

(define (echo-server) 
    (define-values (in out) (tcp-accept listener)) 
    (thread (lambda() (copy-port in out) 
        (print (read in)) 
        (close-output-port out))) 
    (echo-server)) 

(echo-server) 

當我連接到localhost:80我得到一些反饋 - 但是當我嘗試使用我的Web瀏覽器,我不能得到任何打印。如何修改此代碼,以便它可以監聽來自Web請求的數據包?

+0

通過寫入移動我得到的印象,你想攔截通信到端口80,而你的代碼只適用於代表它運行的機器,如http:// localhost/blabla而不是嗅探器的網址。如果你只是在尋找嗅探器,我建議wireshark。 – Sylwester

+2

我相信你想要實現一個_proxy server_而不是一個回顯服務器:一個進程在HTTP連接中間站立,並在允許正常通信的同時「看到」所有傳入/傳出通信。 –

+0

@ÓscarLópez是的,我相信這就是我正在尋找的東西 - 你能否詳細解答我的代理服務器和代理服務器之間的區別(簡單地說,如果我問得太多)? – sdasdadas

回答

4

但是,我似乎遇到了與我的任何一個數據包嗅探器是如何工作的

是瞭解一堵牆。數據包嗅探器不是使用常規套接字;它使用任何可用的機制來被動地觀察由網絡接口​​接收或發送的數據包。如果你只是想手錶上的端口80 HTTP流量,而不響應到交通或改變的流量,你就需要使用一些諸如libpcap的/ WinPcap的,其使用適當的機制,您的操作系統的被動看包。例如,參見SPeaCap library for Racket

但是,請注意,如果您被動地嗅探流量,您將看到的是原始鏈路層數據包;爲了從中提取TCP內容,您必須解析鏈路層頭,IP頭和TCP頭才能找到內容。我會讓你知道如何做到這一點。

+0

啊,謝謝。我不介意在數據包之間(像中間人的攻擊?) - 但我不知道是否可以坐在我的Chrome客戶端和端口80之間(並攔截,分析並傳遞數據包從Chrome瀏覽器轉到某個Web服務器)。這可以輕鬆完成嗎?或者,這種用例究竟爲什麼存在包嗅探? – sdasdadas

+2

數據包嗅探涉及截取和分析;它不涉及向前走,例如,竊聽電話涉及聽取某個人的說話,並將其重複給另一個人,以便他們聽到。另一種選擇是編寫一個Web代理程序,通過雙向傳遞所有流量,並對流量進行自己的分析。但是,要使用* that *,您必須將Chrome配置爲通過您的應用程序作爲代理服務器。我會讓你知道如何做到這一點。 – 2013-08-05 06:06:39

0

您的TCP服務器只是作爲迴應服務器,這意味着它不符合HTTP。您的瀏覽器期待有效​​的HTTP響應,所以它不起作用並不奇怪。

球拍有各種各樣的圖書館。快速搜索文檔的打開了這一點:Web Server: HTTP Server

+0

我可能不在基地,但我對網絡服務器方面並不太感興趣。我只想抓取來自端口80的網絡數據的標題。即使我的瀏覽器期望HTTP響應,我是否仍然會攔截出去的請求? – sdasdadas