iT邦幫忙

0

關於netstat指令求解

小弟目前正在學習Windows Server 2012 Datacenter

以前在網路分享的文章看到在Linux下輸入

netstat -atnp -A inet | grep ":80" | awk -F " " '{print $5} ' | awk -F ":" '{print $1}' | sort | uniq -c | sort -nr | head -5

可以顯示出指定的PORT最高連線數前五個IP與其連線數,因為常受到端口連線數異常的困擾,想藉此快速取得異常的IP然後從路由器封鎖,但這些指令在Windows下不支援的。

想請教IT大神們,我在windows server 2012指令該如何下可達到這效果,或者有更好的方法能讓我快速知道連線數最高的前幾名IP與連線數呢...

2 個回答

18
wiseguy
iT邦超人 1 級 ‧ 2013-10-29 09:26:39
最佳解答

請去抓一個 UnxUtils 工具包
http://sourceforge.net/projects/unxutils/
將壓縮包裡 usr\local\wbin\ 目錄下的檔案解壓到 c:\windows 中 (或者放到你喜歡的目錄,但下列指令就得加上目錄名。) 然後用這個指令就可以達到同樣效果:

<pre class="c" name="code">netstat -anp TCP | gawk.exe "/:80/{print $3}" | cut.exe -d: -f1 | sort.exe | uniq.exe -c | sort.exe -nr | head.exe -5

其中 gawk.exe、cut.exe、sort.exe、uniq.exe、head.exe 都是壓縮包裡的執行檔。

看更多先前的回應...收起先前的回應...
wiseguy iT邦超人 1 級 ‧ 2013-10-29 09:50:11 檢舉

也可以把去除 port 及統計,都交給 awk 來做,就能省去 3 個指令:

<pre class="c" name="code">netstat -anp TCP | gawk.exe "/:80/{split($3,A,/:/); ++S[A[1]]} END {for(a in S) printf(\"%5d\t%s\n\",S[a],a)}" | sort.exe -nr | head.exe -5
ak47t74 iT邦新手 5 級 ‧ 2013-10-29 10:59:27 檢舉

你好,我已經將usr\local\wbin\ 目錄下的檔案解壓到 c:\windows 中,輸入結果如下圖

一、輸入上述第一個指令出現的訊息

二、輸入上述第二個指令出現的訊息

不知道我有遺漏了什麼-nr系統找不到指定的檔案...

wiseguy iT邦超人 1 級 ‧ 2013-10-29 11:35:20 檢舉

你是要使用 PowerShell 嗎?如果不是,那開命令列視窗 (cmd) 執行就好了。PowerShell 是 windows 另一個東施效顰的玩意兒,它有它不一樣的解法。

ak47t74 iT邦新手 5 級 ‧ 2013-10-29 12:44:16 檢舉

我在Windows 8的CMD輸入也是顯示同樣的結果@@ 不知道那-nr有什麼問題@@

wiseguy iT邦超人 1 級 ‧ 2013-10-29 14:34:18 檢舉

你在 sort.exe 的命令上,加上路徑再試試看。即:c:\windows\sort.exe 。
因為 windows 自己有 sort,所以在你沒加目錄時,它可能以自己的 sort 來執行,所以看不懂 unix 的參數 -nr。

6
poemnite
iT邦研究生 3 級 ‧ 2013-10-29 13:15:47

微軟網站不是有個現成的軟體 TCPViewer 可以用?
不是就可以看的一清二楚?
http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx

ak47t74 iT邦新手 5 級 ‧ 2013-10-29 13:21:21 檢舉

不過TCPView似乎沒辦法如指令取得每個IP連線數的總和並排序,如圖那樣的資訊

目前卡在sort.exe -nr,在-nr這邊有問題,去掉-nr這參數後就會顯示資訊了,但是不會排序...

我要發表回答

立即登入回答