我需要在Mac中創建一個shell腳本,它將監視並且如果指定的URL(例如* .google.com)從任何瀏覽器或程序中被命中,shell腳本將提示或做一個操作。任何人都可以指導如何做到這一點?監視來自Shell腳本的URL請求
回答
如果你想監視或捕獲網絡流量,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。
它給了我下面的錯誤:'pktap_filter_packet:pcap_add_if_info(en3,1)失敗:pcap_add_if_info:pcap_compile_nopcap()失敗 ' –
這通常意味着你的'tcpdump'命令行選項有錯誤。你跑的確切命令是什麼? –
當我運行'sudo tcpdump -l dst host * .google.com'時,它給出了錯誤。當我運行'sudo tcpdump -l dst主機google.com'並從瀏覽器中點擊google.com時,它只是一直在監聽,但沒有顯示任何結果。即使對於'sudo tcpdump -ql dst主機google.com |而讀線;做回聲「找到匹配」;它沒有顯示任何東西。 –
這些環境變量會將代理設置設置爲我的程序,如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&ei=3ExvWajSGa2EyAXS376oCw">here</A>.
</BODY></HTML>
* Connection #0 to host 138.106.75.10 left intact
你的機器上安裝Apache並將其配置爲正向代理,像下面的例子中,關鍵是結合mod_actions
和mod_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>
我從來沒有嘗試過,但理論上它應該工作。
- 1. Shell腳本來監視掛載點
- 2. Inotify兼容Shell腳本來監視某個目錄的shell
- 3. bash腳本來監視我自己
- 4. 來自Adobe InDesign腳本的HTTP請求?
- 5. 來自shell腳本的Javascript
- 6. 來自Shell腳本的SSH
- 7. Shell腳本:啓動監視器任務
- 8. 監視來自瀏覽器的AJAX請求
- 9. 來自shell腳本的SSH另一個shell腳本
- 10. 檢查請求腳本的URL在SOAP
- 11. 修改腳本中的Zapier請求url
- 12. 請求來自url的數據
- 13. 來自url的多個請求filtr Djjango
- 14. 來自url的Yii2請求參數
- 15. 來自node.js的調用shell腳本
- 16. 監視服務器請求
- 17. 監視I/O請求
- 18. Java applet:監視HTTP請求
- 19. 無視Shell腳本
- 20. 將腳本和CSS放在來自內部請求的初始請求中
- 21. shell腳本來自動scp命令
- 22. 來自Chrome擴展的注入腳本中的跨域請求
- 23. Unix Shell腳本 - 特定模式的監視器登錄失敗
- 24. Unix Shell腳本監視文件夾的用戶詳細信息
- 25. 在Expect腳本中監視產生的shell錯誤進程
- 26. 用於監視和複製文件更改的UNIX shell腳本
- 27. 用於CPU負載監視的Shell腳本
- 28. Shell腳本 - URL操作
- 29. 來自CodeGenerationLog.txt的runforms.jsp請求未找到腳本
- 30. 運行bash腳本與來自客戶端的請求節點
如果您需要監控X點和Y點之間的流量,說明X和Y是什麼很重要。例如,X可以是本地以太網網絡上的計算機,或咖啡店的wifi,或者只是一個特定的服務器。而且Y還需要有明確的定義,例如X中所有機器必須通過的網絡的網關服務器。另一個需要澄清的重要事項是您需要監控的協議。它只是HTTP嗎?還是HTTPS呢? – janos
我只是想在用戶從任何瀏覽器/腳本/任何機器點擊url時運行我的腳本。可能嗎? @janos –
我不知道是否可以做到這一點,你想要的簡單。我不會說任何有關OSX的事情,因爲我對此沒有任何瞭解。我假設一切都在同一臺機器上。在Linux中,你可以結合'tcpdump'和'incron'。比如:'tcpdump dst port 80或dst port 443>/some/log/file'並配置'incrontab'以在每次'/ some/log/file'更新時運行'bash'腳本。 – Azize