// 用jps命令,显示所有JAVA进程。
# jps
18374 DesktopServerLauncher
14690 Bootstrap
23211 Jps
//除了jps那行,其余全是JAVA进程。
// 用netstat命令,显示进程ID和程序名(p);然后用grep命令找出进程18374;然后用head命令显示前3行。
# netstat -antp | grep 18374 | head -3
tcp 0 0 :::54104 :::* LISTEN 18374/java
tcp 0 0 ::ffff:115.238.54.116:54104 ::ffff:5.127.6.211:33040 ESTABLISHED 18374/java
tcp 0 0 ::ffff:120.199.8.215:54104 ::ffff:223.73.28.27:3784 ESTABLISHED 18374/java
//最后一列里的18374,就是JAVA程序的端口号。
// 查看端口号为54104的链接数。好多啊。要好好查查了。
# netstat -ant | grep ":54104" | wc -l
7177
// 用netstat命令查看网络链接;用head命令,显示其前3行(参数为-3),便于查看每列是啥意思。
// 参数-a表示所有(All)链接;-t表示TCP,-n只显示数字(Number),不转成主机名,这样速度快。
# netstat -ant | head -3
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:50222 0.0.0.0:* LISTEN
// 我们发现,最后一列(NF)是状态。下面就可以按状态进行统计了。
// 用awk命令提取出第6列;然后用sort命令排序;然后用uniq命令统计(c);最后再按数值(n)倒序(r)排列。
# netstat -ant | grep ":54104" | awk '{print $NF}' | sort | uniq -c | sort -nr
5248 TIME_WAIT
655 FIN_WAIT1
539 FIN_WAIT2
321 ESTABLISHED
107 CLOSING
64 SYN_RECV
36 LAST_ACK
1 LISTEN
1 CLOSE_WAIT
// 然后,还可以用dmesg命令,查看一下LOG;或者查看(cat /var/log/messages)
[root@www ~]# dmesg | tail -5
possible SYN flooding on port 54104. Sending cookies.
possible SYN flooding on port 54104. Sending cookies.
possible SYN flooding on port 54104. Sending cookies.
possible SYN flooding on port 54104. Sending cookies.
possible SYN flooding on port 54104. Sending cookies.
// 发现全是洪水攻击(SYN flooding)啊!!!
另外的几个示例
// 按本地IP,统计54104端口的连接数,并倒序排列
# netstat -ant | grep ":54104" | awk '/^tcp/{++S[$4]} END {for(a in S) print a,S[a]}' | sort -nr -k 2 -t ' '
::ffff:115.238.54.116:54104 6240
::ffff:120.199.8.215:54104 436
::ffff:121.52.229.126:54104 275
115.238.54.116:54104 59
121.52.229.126:54104 4
:::54104 1
120.199.8.215:54104 1
// 查看54104端口连接数最多的前N个远端IP。$5表示第5列的远端IP;-F:表示按:分割,然后去前面的IP。
# netstat -ant | grep ":54104" | awk '{print $5}' | awk -F: '{print $(NF-1)}' | sort | uniq -c | sort -nr | head
79 203.82.85.33
20 202.67.41.51
13 180.214.232.10
12 202.67.40.50
11 85.62.233.162
10 85.62.233.161
8 171.255.157.21
8 112.215.63.47
7 223.255.225.80
7 120.161.1.127
//按端口,统计TCP链接数
# netstat -ant | awk '/^tcp/{print $4}' | awk -F: '{print $(NF)}' | sort | uniq -c | sort -nr | head
3199 54104
2381 9090
125 8000
22 5432
5 80
3 50222
2 25
2 22
1 8080
1 8009
//对最后一行(NF),进行统计Key/Value数组统计;然后,对第二列(k)进行进行数值(n)倒序(r)排列(分割符为空格)
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' | sort -nr -k 2 -t ' '
TIME_WAIT 6465
FIN_WAIT2 2178
ESTABLISHED 1526
FIN_WAIT1 892
CLOSING 93
SYN_RECV 86
LAST_ACK 58
CLOSE_WAIT 1
//对最后一行(NF),进行统计Key/Value数组统计;然后,进行数值(n)倒序(r)排序
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print S[a],a}' | sort -nr
5999 TIME_WAIT
2041 FIN_WAIT2
1439 ESTABLISHED
837 FIN_WAIT1
105 CLOSING
96 SYN_RECV
47 LAST_ACK
1 CLOSE_WAIT
//查出哪个IP地址连接最多(IP归属地查询工具nali需要安装)
# netstat -ant | awk '{print $5}' | awk -F: '{if($NF>1){print $(NF-1)}}' | sort | uniq -c | sort -nr | head | nali
30 127.0.0.1[本机地址]
15 71.57.157.0[美国 乔治亚州Norcross]
13 203.82.85.33[马来西亚]
11 218.202.4.149[云南省昆明市 移动]
10 211.137.119.10[陕西省 移动]
9 183.224.2.94[中国 移动]
9 180.214.232.10[印度尼西亚]
9 101.254.152.168[中国]
8 85.62.233.162[西班牙]
8 202.67.40.50[印度尼西亚]