2017-07-14 40 views
2

我需要在Mac中創建一個shell腳本,它將監視並且如果指定的URL(例如* .google.com)從任何瀏覽器或程序中被命中,shell腳本將提示或做一個操作。任何人都可以指導如何做到這一點?監視來自Shell腳本的URL請求

+0

如果您需要監控X點和Y點之間的流量,說明X和Y是什麼很重要。例如,X可以是本地以太網網絡上的計算機,或咖啡店的wifi,或者只是一個特定的服務器。而且Y還需要有明確的定義,例如X中所有機器必須通過的網絡的網關服務器。另一個需要澄清的重要事項是您需要監控的協議。它只是HTTP嗎?還是HTTPS呢? – janos

+0

我只是想在用戶從任何瀏覽器/腳本/任何機器點擊url時運行我的腳本。可能嗎? @janos –

+0

我不知道是否可以做到這一點,你想要的簡單。我不會說任何有關OSX的事情,因爲我對此沒有任何瞭解。我假設一切都在同一臺機器上。在Linux中,你可以結合'tcpdump'和'incron'。比如:'tcpdump dst port 80或dst port 443>/some/log/file'並配置'incrontab'以在每次'/ some/log/file'更新時運行'bash'腳本。 – Azize

回答

1

如果你想監視或捕獲網絡流量,tcpdump是你的朋友,不需要代理服務器,額外的安裝等,並應該在股票Mac OS以及其他* nix變體上工作。

這裏有一個簡單的腳本 -

sudo tcpdump -ql dst host google.com | while read line; do echo "Match found"; done 

while read循環將繼續運行,直到手動終止;用您的首選命令替換echo "Match found"。請注意,這將每頁加載多次觸發;如果您只希望它運行至看到相關流量,則可以使用tcpdump -c 1

由於Azize提到,您也可以讓tcpdump在一個進程中輸出到一個文件,並在另一個進程中監視該文件。 incrontab在Mac OS X上不可用;你可以在while read環包尾-f:

sudo tcpdump -l dst host google.com > /tmp/output & 
tail -fn 1 /tmp/output | while read line; do echo "Match found"; done 

有一個很好的similar script available on github。如果您想讓過濾器更復雜,您也可以使用read up on tcpdump filters

+0

它給了我下面的錯誤:'pktap_filter_packet:pcap_add_if_info(en3,1)失敗:pcap_add_if_info:pcap_compile_nopcap()失敗 ' –

+0

這通常意味着你的'tcpdump'命令行選項有錯誤。你跑的確切命令是什麼? –

+0

當我運行'sudo tcpdump -l dst host * .google.com'時,它給出了錯誤。當我運行'sudo tcpdump -l dst主機google.com'並從瀏覽器中點擊google.com時,它只是一直在監聽,但沒有顯示任何結果。即使對於'sudo tcpdump -ql dst主機google.com |而讀線;做回聲「找到匹配」;它沒有顯示任何東西。 –

3

這些環境變量會將代理設置設置爲我的程序,如curl,wget和瀏覽器。

$ env | grep -i proxy 
NO_PROXY=localhost,127.0.0.0/8,::1 
http_proxy=http://138.106.75.10:3128/ 
https_proxy=https://138.106.75.10:3128/ 
no_proxy=localhost,127.0.0.0/8,::1 

在這裏你可以看到curl方面,它總是連接上我的代理,你的情況你的代理服務器設置會是這樣:http://localhost:3128

$ curl -vvv www.google.com 
* Rebuilt URL to: www.google.com/ 
* Trying 138.106.75.10... 
* Connected to 138.106.75.10 (138.106.75.10) port 3128 (#0) 
> GET http://www.google.com/ HTTP/1.1 
> Host: www.google.com 
> User-Agent: curl/7.47.0 
> Accept: */* 
> Proxy-Connection: Keep-Alive 
> 
< HTTP/1.1 302 Found 
< Cache-Control: private 
< Content-Type: text/html; charset=UTF-8 
< Referrer-Policy: no-referrer 
< Location: http://www.google.se/?gfe_rd=cr&ei=3ExvWajSGa2EyAXS376oCw 
< Content-Length: 258 
< Date: Wed, 19 Jul 2017 12:13:16 GMT 
< Proxy-Connection: Keep-Alive 
< Connection: Keep-Alive 
< Age: 0 
< 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>302 Moved</TITLE></HEAD><BODY> 
<H1>302 Moved</H1> 
The document has moved 
<A HREF="http://www.google.se/?gfe_rd=cr&amp;ei=3ExvWajSGa2EyAXS376oCw">here</A>. 
</BODY></HTML> 
* Connection #0 to host 138.106.75.10 left intact 

你的機器上安裝Apache並將其配置爲正向代理,像下面的例子中,關鍵是結合mod_actionsmod_proxy

Listen 127.0.0.1:3128 
<VirtualHost 127.0.0.1:3128> 
    Script GET "/cgi-bin/your-script.sh" 

    ProxyRequests On 
    ProxyVia On 
    <Proxy http://www.google.com:80> 
    ProxySet keepalive=On 
    Require all granted 
    </Proxy> 
</VirtualHost> 

我從來沒有嘗試過,但理論上它應該工作。