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

How to see all Request URLs the server is doing (final URLs)

如何从命令行列出从服务器(*ux 机器)到另一台机器的 URLs 请求。

比如我在服务器ALPHA_RE的命令行。 我对 google.co.uk 执行一次 ping,然后对 bbc.co.uk 执行另一个 ping 我想从提示中看到:

google.co.uk bbc.co.uk

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

请注意,只有在普通 ubuntu 存储库中可用的软件包可用 - 并且它必须与命令行一起使用

编辑 最终目标是查看 API URL 的 PHP 脚本(运行 由 cronjob)请求;以及 API URL 服务器 请求 'live' 的内容。 这些主要对几个 URL 执行 GET 和 POST 请求,我有兴趣了解参数:

是否请求:

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。

编辑: (指定的旧票证:请注意,我无法在该服务器上安装任何东西(没有额外的软件包,我只能使用 "normal" 命令 - 如 tcpdump、sed、grep 等)// 但是作为获取这些信息使用 tcpdump 非常困难,然后我使安装包成为可能)

您可以使用 tcpdumpgrep 从主机获取有关 activity 网络流量的信息,以下命令行应该让你包含主机的所有行:

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

如果我 运行 将以上内容合而为一 shell 并启动到 Whosebug 的链接会话,我会看到:

Host: www.whosebug.com
Host: whosebug.com

如果您想了解更多关于实际 HTTP 请求的信息,您还可以在 GET、PUT 或 POST 请求的 grep 中添加语句(即 -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: whosebug.com
E....x@.@..7....h.$....P....Ga.mP...>;..GET /search?q=tcpdump HTTP/1.1
Host: whosebug.com

还有一个 ngrep:

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

我的测试用例是 运行ning 链接 whosebug.com,将 tcpdump 放入搜索字段并按回车键。

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

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

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

你应该看到实际的 URLs

一个简单的解决方案是修改您的“/etc/hosts”文件以拦截 API 调用并将它们重定向到您自己的网络服务器

api.foobar.com 127.0.0.1