我需要在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. 修改脚本中的Zapier请求url
- 11. 检查请求脚本的URL在SOAP
- 12. 来自url的Yii2请求参数
- 13. 请求来自url的数据
- 14. 来自url的多个请求filtr Djjango
- 15. 来自node.js的调用shell脚本
- 16. 监视I/O请求
- 17. 监视服务器请求
- 18. Java applet:监视HTTP请求
- 19. 无视Shell脚本
- 20. 将脚本和CSS放在来自内部请求的初始请求中
- 21. 谷歌应用脚本获取脚本请求的URL
- 22. shell脚本来自动scp命令
- 23. 来自Chrome扩展的注入脚本中的跨域请求
- 24. 在Expect脚本中监视产生的shell错误进程
- 25. Unix Shell脚本监视文件夹的用户详细信息
- 26. Unix Shell脚本 - 特定模式的监视器登录失败
- 27. 用于监视和复制文件更改的UNIX shell脚本
- 28. 用于CPU负载监视的Shell脚本
- 29. Shell脚本 - URL操作
- 30. 来自mongo脚本的服务器POST请求
如果您需要监控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