监视Shell脚本的URL请求

时间:2017-07-14 03:47:53

标签: bash macos shell url netstat

我需要在Mac中创建一个shell脚本,该脚本将监视并且如果从任何浏览器或程序命中指定的URL(例如,* .google.com),shell脚本将提示或执行操作。任何人都可以指导如何做到这一点吗?

3 个答案:

答案 0 :(得分:3)

这些环境变量会将代理设置设置为我的程序,例如curlwget和浏览器。

$ 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>

我从来没有尝试过,但理论上它应该有用。

答案 1 :(得分: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输出到文件,并在另一个进程中监视该文件。 {/ 1}}在Mac OS X上不可用;你可以将tail -f包裹在incrontab循环中:

while read

有一个好similar script available on github。如果您想使过滤器更复杂,也可以read up on tcpdump filters

答案 2 :(得分:0)

首先,我们必须将url放入必须监视的sample.txt文件中。

FILEPATH=/tmp/url
INFILE=$FILEPATH/sample.txt
OUTFILE=$FILEPATH/url_status.txt

> $OUTFILE

for file in `cat $INFILE`
do
echo -n "$file |" >> $FILEPATH/url_status.txt
timeout 20s curl -Is $file |head -1 >> $FILEPATH/url_status.txt
done

grep '200' $OUTFILE|awk '{print $1"   Url is working fine"}' > /tmp/url/working.txt
grep -v '200' $OUTFILE|awk '{print $1"    Url is not working"}' > /tmp/url/notworking.txt

COUNT=`cat /tmp/url/notworking.txt | wc -l`

if [ $COUNT -eq 0 ]
        then
                echo "All url working fine"
        else
                echo "Issue in following url"
                cat /tmp/url/notworking.txt
fi