首页 > 试题广场 >

netstat练习2-查看和3306端口建立的连接

[编程题]netstat练习2-查看和3306端口建立的连接
  • 热度指数:13956 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:6160            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 172.16.56.200:41856     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:49822     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:49674     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:42316     172.16.34.143:3306      ESTABLISHED
tcp        0      0 172.16.56.200:44076     172.16.240.74:6379      ESTABLISHED
tcp        0      0 172.16.56.200:49656     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:58248     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:50108     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41944     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:35548     100.100.32.118:80       TIME_WAIT
tcp        0      0 172.16.56.200:39024     100.100.45.106:443      TIME_WAIT
tcp        0      0 172.16.56.200:41788     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:58260     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:41812     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:41854     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:58252     100.100.142.4:80        TIME_WAIT
tcp        0      0 172.16.56.200:49586     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41754     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:50466     120.55.222.235:80       TIME_WAIT
tcp        0      0 172.16.56.200:38514     100.100.142.5:80        TIME_WAIT
tcp        0      0 172.16.56.200:49832     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:52162     100.100.30.25:80        ESTABLISHED
tcp        0      0 172.16.56.200:50372     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:50306     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:49600     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41908     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:60292     100.100.142.1:80        TIME_WAIT
tcp        0      0 172.16.56.200:37650     100.100.54.133:80       TIME_WAIT
tcp        0      0 172.16.56.200:41938     172.16.34.144:3306      ESTABLISHED
tcp        0      0 172.16.56.200:49736     172.16.0.24:3306        ESTABLISHED
tcp        0      0 172.16.56.200:41890     172.16.34.144:3306      ESTABLISHED
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:45881           0.0.0.0:*
udp        0      0 127.0.0.53:53           0.0.0.0:*
udp        0      0 172.16.56.200:68        0.0.0.0:*
udp6       0      0 ::1:323                 :::*
raw6       0      0 :::58                   :::*                    7
现在需要你查看和本机3306端口建立连接并且状态是established的所有IP,按照连接数降序排序。你的脚本应该输出
10 172.16.0.24
9 172.16.34.144
1 172.16.34.143

awk '/.*3306.*ESTABLISHED.*/{print $5}' nowcoder.txt | cut -d ":" -f 1 | sort | uniq -c | sort -rn | awk '{print $1,$2}'

cat nowcoder.txt | awk '/.*3306.*ESTABLISHED.*/{print $5}' | awk -F ":" '{
    if(a[$1]==""){a[$1]=1;}
    else{a[$1]=a[$1]+1;}
}END{
    for( i in a){
        print a[i],i
    }
 }'  | sort -nr 

编辑于 2024-01-27 13:17:44 回复(0)
#!/bin/bash

declare -A map
while read line; do
	arr=($line)
	[[ ${arr[0]} == tcp ]] && [[ ${arr[4]} =~ :3306 ]] && ((map["${arr[4]}"]++))
done <nowcoder.txt

for i in ${!map[@]}; do
	arr=(${i//:/ })
	echo ${map[${i}]}' '${arr[0]}
done | sort -nr

发表于 2023-10-12 17:18:28 回复(0)

1. grep查找,awk分割两次,排序,计数,排序,打印
grep '3306.*ESTABLISHED' nowcoder.txt | awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c | sort -nr | awk '{print $1, $2}'  

2. grep查找,awk分割,sed将:3306替换为空,排序,计数,排序,打印
grep '3306.*ESTABLISHED' nowcoder.txt | awk '{print $5}' | sed 's/:3306//g' | sort | uniq -c | sort -nr | awk '{print $1, $2}' 

3. awk查找,分割两次,排序,计数,排序,打印
awk '/3306.*ESTABLISHED/ {print $5}' nowcoder.txt | awk -F ':' '{print $1}' | sort | uniq -c | sort -nr | awk '{print $1, $2}'

4. awk查找,分割,sed将:3306替换为空,排序,计数,排序,打印
awk '/3306.*ESTABLISHED/ {print $5}' nowcoder.txt | sed 's/:3306//g' | sort | uniq -c | sort -nr | awk '{print $1, $2}'

5. awk查找,substr子串,排序,计数,排序,打印
awk '/3306.*ESTABLISHED/ {print substr($5, 0, length($5) - 5)}' nowcoder.txt | sort | uniq -c | sort -nr | awk '{print $1, $2}'

发表于 2023-05-07 22:45:23 回复(0)
grep ":3306" nowcoder.txt | grep "ESTABLISHED" | awk '{print $5}'|sed 's/:3306//g' | sort | uniq -c |awk '{print $1,$2}'|sort -rn
发表于 2023-03-30 17:24:54 回复(0)
# grep -P "3306\s+ESTABLISHED" nowcoder.txt | awk '{print $5}'|sort\
# | uniq -c | sort -k1nr | awk '{print $1,$2}' | cut -d ":" -f 1
# sed -nr "/3306\s+ESTABLISHED/p" nowcoder.txt| awk '{print $5}'|sort\
# | uniq -c | sort -k1nr | awk '{print $1,$2}' | cut -d ":" -f 1
# awk '$0 ~ /3306/&&/ESTABLISHED/ {print $5}'| sort | uniq -c | sort -k1nr \
# | awk '{print $1,$2}' | cut -d ":" -f 1
declare -A mp
while read line ; do
    arr=($line)
    if [[ ${arr[4]} =~ 3306 && ${arr[5]} =~ ESTAB ]]; then
        ip=$(echo ${arr[4]} | cut -d ":" -f 1)
        ((mp[$ip]++))
    fi
done
idx=0
for i in ${!mp[@]}; do
    temp[$idx]=`echo ${mp[$i]} $i`
    let idx++
done

echo ${temp[*]} | xargs -n2 | sort -k1rn

发表于 2022-09-03 19:30:31 回复(0)

awk+gensub+sort

awk '{
    if($6 == "ESTABLISHED" && $5 ~ /.*:3306/){
        str=gensub(/(.*):3306/, "\\1", "g", $5)
        a[str]++
    }
}
END{
    for(i in a){
        print(a[i]" "i)
    }
}' nowcoder.txt | sort -nr
发表于 2022-08-28 00:13:47 回复(0)
grep -E  "3306.*ESTABLISHED" nowcoder.txt|awk '{print $5}'|awk -F : '{print $1}' |sort|uniq -c|sort -nr|awk '{print $1,$2}'
发表于 2022-08-08 14:54:54 回复(0)
awk '/ESTABLISHED/ && /3306/{map[substr($5,0,length($5)-5)]++} END {for(addr in map) print(map[addr],addr) }' nowcoder.txt| sort -nrk 1
发表于 2022-07-10 16:58:04 回复(0)
awk '/ESTABLISHED/{print $5}' nowcoder.txt|grep 3306|awk -F":" '{print $1}'|sort|uniq -c|sort -r -n|xargs -n2
发表于 2022-07-01 16:02:36 回复(0)
grep 3306.*ESTABLISHED|awk '{print $5}'|cut -d ":" -f 1|sort|uniq -c|sort -rn|sed 's/^ *//g'

发表于 2022-06-24 16:06:16 回复(0)
awk '/3306/&&/ESTABLISHED/' nowcoder.txt | awk -F: '{print $2}' | awk '{print $2}' | sort | uniq -c | awk '{print $1,$2}' | sort -nrk1
反复套awk...
发表于 2022-06-11 22:16:44 回复(0)
cat nowcoder.txt | grep "3306"| awk '{print $5}' |cut -d ":" -f 1 | sort |uniq -c | sort -n -r |awk '{print $1 " " $2}'
发表于 2022-05-25 17:18:51 回复(0)
awk '
BEGIN {
    FS = " "
}
{
    if ($5 ~ /3306/) {
        split($5, arr, ":")
        a[arr[1]]++;
    }
}
END {
    for (k in a) {
        print a[k],k
    }
}
' nowcoder.txt | sort -rn

发表于 2022-05-16 12:07:00 回复(0)
awk -F " " '$5~/:3306/ {print $5":"$6}'| awk -F ":" '{if($3=="ESTABLISHED"){
    sum[$1]++
}}END{for(x in sum){
    print sum[x],x
}}' | sort -r -n -k1
发表于 2022-05-11 18:04:59 回复(0)
awk '$5~/3306/ && $6=="ESTABLISHED" {print $5}' nowcoder.txt | awk 'BEGIN{FS=":"}{a[$1]++}END{for(i in a){print a[i],i}}'| sort -nrk1

发表于 2022-05-10 20:07:05 回复(0)
cat nowcoder.txt | grep '3306' | grep 'ESTABLISHED' | awk -F ' ' '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr -k1 | awk '{print $1" "$2}'

发表于 2022-05-06 10:28:09 回复(0)
awk '{print $5}'| sed -n '/:3306/p' | sed -r 's#(.*)(:.*$)#\1#g'|sort|uniq -c|sort -nr|awk '{print $1,$2}'
发表于 2022-05-01 20:46:36 回复(0)