2015-11-06 41 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 
相關問題