。鳥x歌的判別方式
# 1. Get the TIME_WAIT signle
#=== Part A, about the TIME WAIT signle ===#
netstat -an|grep 80|grep TIME| awk '{print $5}'| cut -d':' -f1| sort |uniq -c|
awk '{if ($1 >= 12) print $2}' > $basedir/netstat1
sleep 12s
netstat -an|grep 80|grep TIME| awk '{print $5}'| cut -d':' -f1| sort |uniq -c|
awk '{if ($1 >= 12) print $2}' > $basedir/netstat2
sleep 12s
netstat -an|grep 80|grep TIME| awk '{print $5}'| cut -d':' -f1| sort |uniq -c|
awk '{if ($1 >= 12) print $2}' > $basedir/netstat3
cat $basedir/netstat1 $basedir/netstat2 $basedir/netstat3 | sort | uniq -c |
awk '{ if ( $1 == 3 ) print $2 }' > $basedir/netstat.now
denyip_netstat=`cat $basedir/netstat.now`#=== Part B, about the log file ===#
tail -n 1000 $access_log | grep "Teleport" | cut -d' ' -f1|sort|uniq > $basedir/loga.now
denyip_log=`cat $basedir/loga.now`
。施x銘前輩的判別方式
# awk尋找 :80與 TIME_WAIT狀態
# match
# substr將 IP設定為變數 IP
# 判斷忽略 127.0.0.1
# 如果不是則輸出此 IP
netstat -tn | awk "/:80 .*TIME_WAIT/ {
match($5, /[0-9]+.[0-9]+.[0-9]+.[0-9]+/);
ip=substr($5, RSTART, RLENGTH)
if ( ip ~ /127.0.0.1/ ) {}
else print ip}" |
sort | uniq -c
最主要的還是要把 netstat 狀態好好理解一下吧
Quote: http://linux.vbird.org/linux_server/0140networkcommand.php
- Proto:該連線的封包協定,主要為 TCP/UDP 等封包;
- Recv-Q:非由使用者程式連接所複製而來的總 bytes 數;
- Send-Q:由遠端主機所傳送而來,但不具有 ACK 標誌的總 bytes 數, 意指主動連線 SYN 或其他標誌的封包所佔的 bytes 數;
- Local Address:本地端的位址,可以是 IP (-n 參數存在時), 也可以是完整的主機名稱。如上表我們看到的 IP 格式有兩種,一種是 IPv4 的標準, 亦即是四組十進位的數字後面加上冒號『:』後,接著 port number 。一種是 IPv6 , 前面的 IP 加上很多冒號『:』的格式。我們可以由這個顯示的資料看出這個服務是開放在哪一個介面, 例如上表當中, port 22 是開放在 0.0.0.0 ,亦即是所有介面都可以連到 port 22 , 至於 port 53 則僅開放在本機的 127.0.0.1 這個介面而已,所以是不對外部介面開放的意思。
- Foreign Address:遠端的主機 IP 與 port number
- stat:狀態列,主要的狀態含有:
- ESTABLISED:已建立連線的狀態;
- SYN_SENT:發出主動連線 (SYN 標誌) 的連線封包;
- SYN_RECV:接收到一個要求連線的主動連線封包;
- FIN_WAIT1:該插槽服務(socket)已中斷,該連線正在斷線當中;
- FIN_WAIT2:該連線已掛斷,但正在等待對方主機回應斷線確認的封包;
- TIME_WAIT:該連線已掛斷,但 socket 還在網路上等待結束;
- LISTEN:通常用在服務的監聽 port !可使用『 -l 』參數查閱。
留言