#!/bin/bash
# 业务知识:
# netstat 是一个用于显示网络连接、路由表、接口统计等信息的命令
# Proto Recv-Q Send-Q Local Address Foreign Address State
# tcp 0 0 192.168.1.10:54321 93.184.216.34:443 ESTABLISHED
# 这条语句理解为:
# 我眼前登录的服务器 和 地址为93.184.216.34的服务器 建立连接,并处于活动状态(ESTABLISHED)
# 眼前登录的服务器使用它本身的54321端口,地址为93.184.216.34的服务器使用它本身的443端口
# 它们建立连接的协议是 tcp
# Proto 协议类型,例如 tcp, udp, icmp 等
# Recv-Q 当前未被处理的接收数据的字节数
# Send-Q 当前未被确认的发送数据的字节数
# Local Address 显示我眼前登录的服务器 的IP地址和端口号
# Foreign Address 表示我眼前登录的服务器 在和谁建立连接,它的地址和端口
# State 连接的状态:
# LISTEN: 监听传入的连接请求
# ESTABLISHED: 连接已建立并处于活动状态
# SYN_SENT: 正在发送连接请求
# SYN_RECV: 接收并正在处理连接请求
# FIN_WAIT1: 连接正在关闭
# FIN_WAIT2: 连接正在关闭,并等待对方关闭
# CLOSE_WAIT: 等待关闭请求
# CLOSED: 连接已关闭
# TIME_WAIT: 等待足够的时间,以确保远程端收到了连接终止请求
# LAST_ACK: 等待对方确认关闭请求
# 问题提炼:每个IP的连接数(谁连了我眼前的服务器) 按 连接数 降序排序
# 案例分析:
# 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
# 按输出的某个案例:0.0.0.0 3 可知是 汇总Foreign Address
# 思路:
# awk 打印出 State 不为空 和 不为数字 的行
# awk 关联数组 汇总$5
grep -v 'State' nowcoder.txt |
awk '
{
if ($6 != "" && $6 !~ /[0-9]/)
print $5
}
' |
awk -F ":" '
{
arr[$1]++
}
END{
for (i in arr)
print i, arr[i]
}
' |
sort -k2nr -k1r
# -k2nr 按第2列的数字 降序排序
# -k1r 按第1列的整个字符串 降序排序 提交代码时 需要
END

京公网安备 11010502036488号