如何查看服务器正在执行的所有请求URL(最终URL)

Ced*_*ric 3 linux bash command-line http tcpdump

从服务器(* ux机器)到另一台机器的命令行URL列表请求方式。

例如,我在服务器ALPHA_RE的命令行上。我从提示符下对google.co.uk进行了ping操作,并对bbc.co.uk进行了另一种操作:

google.co.uk bbc.co.uk

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

请注意,只有正常ubuntu信息库中可用的软件包才可用-它必须与命令行一起使用

编辑 最终目标是查看PHP脚本(由cronjob运行)请求的API URL ;以及服务器请求“实时”使用的API URL 。这些主要对多个URL进行GET和POST请求,我对了解这些参数很感兴趣:

是否要求:

foobar.com/api/whatisthere?and=what&is=there&too=yeah
Run Code Online (Sandbox Code Playgroud)

或者 :

foobar.com/api/whatisthathere?is=it&foo=bar&green=yeah
Run Code Online (Sandbox Code Playgroud)

Cron作业或服务器是否还会执行其他任何GET或POST请求?而且,无论这些API给出什么响应(如果有)。

另外,API列表是未知的-因此您不能grep到一个特定的URL。

编辑:( 指定了旧票证:请注意,我无法在该服务器上安装任何东西(没有额外的软件包,我只能使用“正常”命令-如tcpdump,sed,grep等...)//但获取这些信息使用tcpdump很难,然后我就可以安装软件包了)

Ber*_*eef 6

您可以使用tcpdumpgrep从主机获取有关网络流量活动的信息,以下cmd行应使您包含主机的所有行:

 tcpdump -i any -A -vv -s 0 |  grep -e "Host:"
Run Code Online (Sandbox Code Playgroud)

如果我在一个shell中运行以上命令并启动Links会话以进行stackoverflow,则会看到:

Host: www.stackoverflow.com
Host: stackoverflow.com
Run Code Online (Sandbox Code Playgroud)

如果您想进一步了解实际的HTTP请求,还可以向grep添加GET,PUT或POST请求的语句(即-e“ GET”),这可以为您提供有关相对URL的一些信息(应与较早确定的主机以获取完整URL)。

编辑:根据您编辑过的问题,我尝试进行一些修改:首先是tcpdump方法:

[root@localhost ~]# 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.[@.@.......h.$....P....Ga  .P.9.=...GET / HTTP/1.1
Host: stackoverflow.com
E....x@.@..7....h.$....P....Ga.mP...>;..GET /search?q=tcpdump HTTP/1.1
Host: stackoverflow.com
Run Code Online (Sandbox Code Playgroud)

还有一个ngrep:

[root@localhost ~]# 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
Run Code Online (Sandbox Code Playgroud)

我的测试用例运行的是链接stackoverflow.com,将tcpdump放在搜索字段中,然后按Enter。

这样一来,您可以获得所有URL信息。更好的选择可能是简单地在您自己的服务器上运行反向代理(例如nginx)并修改主机文件(如亚当的回答所示),然后使反向代理将所有查询重定向到实际主机并使用日志记录功能。反向代理以从那里获取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: (.+?)\.\./'
Run Code Online (Sandbox Code Playgroud)

您应该看到实际的网址