2015-11-06 46 views
0

如何从命令行URL中的请求从服务器(一个* ux机器)请求到另一台机器。如何查看服务器正在执行的所有请求URL(最终URL)

例如,我在服务器的命令行ALPHA_RE。 我做一个ping到使用google.co.uk和另一坪至bbc.co.uk 我想看到的,从提示:

google.co.uk bbc.co.uk

所以,不是我正在ping的机器的IP地址,也不是来自将请求传递给google.co.uk或bbc.co.uk的服务器的URL,而是实际的最终URL。

请注意,只有可用上可用普通的Ubuntu库的包 - 它与命令行工作

编辑 的最终目标是看什么API URL的PHP​​脚本(由运行cronjob)请求;以及什么API网址服务器请求'生活'。 这些那些主要做GET和POST请求到多个URL,我想知道的PARAMS:

它做请求:

foobar.com/api/whatisthere?and=what&is=there&too=yeah 

或邮寄至:

foobar.com/api/whatisthathere?is=it&foo=bar&green=yeah 

而且cron作业或服务器是否执行任何其他GET或POST请求? 而且,不管这些API给出什么响应(如果有的话)。

此外,API列表是未知的 - 所以你不能grep到一个特定的URL。

编辑: (旧船票规定:请注意,我不能在该服务器上安装任何东西(没有多余的包,我只能用“正常”的命令 - 像tcpdump的,用sed,grep的,...) //但随着越来越tcpdump的这些信息是相当困难的,然后我做了安装包的可能)

+0

如果您投票表决问题,请考虑留下评论意见宁为什么你投下了票。毕竟,这是人们理解你的行为并改善他们未来问题的唯一途径。 – Cedric

+0

您提到了您的问题中的网址,但您的示例使用的ping仅使用主机名/ IP地址,您是否想知道所有DNS查找(从名称到IP)还是您对特定类型的流量感兴趣? –

+0

感谢您的问题。我对完整的URL感兴趣,而不仅仅是主机名 – Cedric

回答

2

您可以使用tcpdump的 grep的获取有关从主机,下面CMD关于网络流量活动信息行应该让你包含主机:

tcpdump -i any -A -vv -s 0 | grep -e "Host:" 

如果我运行上面的一个壳,并开始一个链接会话计算器我看到:

Host: www.stackoverflow.com 
Host: stackoverflow.com 

如果您想了解更多关于实际的HTTP请求,你也可以语句添加到grep命令GET ,PUT或POST请求(即-e“GET”),它可以让你得到关于相对URL的一些信息(应该与先前确定的主机相结合以获得完整的URL)。

编辑:根据您编辑的问题 我试图做一些修改: 第一tcpdump的方法:

[[email protected] ~]# tcpdump -i any -A -vv -s 0 | egrep -e "GET" -e "POST" -e "Host:" 
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 
E..v.[@[email protected]$....P....Ga .P.9.=...GET/HTTP/1.1 
Host: stackoverflow.com 
[email protected]@..7....h.$....P....Ga.mP...>;..GET /search?q=tcpdump HTTP/1.1 
Host: stackoverflow.com 

而一个的ngrep之一:

[[email protected] ~]# ngrep -d any -vv -w byline | egrep -e "Host:" -e "GET" -e "POST" 
^[[B GET //meta.stackoverflow.com HTTP/1.1..Host: stackoverflow.com..User-Agent: 
    GET //search?q=tcpdump HTTP/1.1..Host: stackoverflow.com..User-Agent: Links 

我的测试用例正在运行链接stackoverflow.com,将tcpdump放入搜索字段并按回车。

这会让您在一行中找到所有的URL信息。更好的选择可能是在自己的服务器上简单地运行反向代理(例如nginx)并修改主机文件(如Adam的答案中所示),并让反向代理将所有查询重定向到实际主机,并使用日志记录功能反向代理从那里获取URL,日志可能会更容易阅读。

编辑2: 如果您使用命令行如:

ngrep -d any -vv -w byline | egrep -e "Host:" -e "GET" -e "POST" --line-buffered | perl -lne 'print $3.$2 if /(GET|POST) (.+?) HTTP\/1\.1\.\.Host: (.+?)\.\./' 

你应该看到实际的URL

+0

提供的这个命令行不给任何结果 - 我试图改变grep -e“Host:”表达式,但没有运气。 – Cedric

+0

嗯,让我再检查一次,你有ngrep吗? –

+0

我可以使用grep的各种风格,但不能使用ngrep(egrep fgrep grep msggrep pgrep rgrep) – Cedric

1

一个简单的解决方案是修改 '/ etc/hosts文件' 文件拦截API调用并将其重定向到您自己的Web服务器

api.foobar.com 127.0.0.1 
相关问题