查询可列出指定时段活跃网络端口与协议的Linux服务器工具
查询可列出指定时段活跃网络端口与协议的Linux服务器工具
当然有啦!要找出过去一段时间(比如上周)曾活跃过的端口和协议,下面这些工具和实用方法应该能帮到你:
1. 用tcpdump抓包 + tshark分析(适合回溯历史流量)
如果之前已经用tcpdump长期保存了网络流量包,那tshark可以帮你快速统计出活跃的端口和协议:
- 先确保你有历史抓包文件(比如按天保存的
pcap文件),如果还没配置,现在可以后台启动长期抓包,每周自动轮转:
这个命令会每天生成一个抓包文件,最多保存7天的记录。nohup tcpdump -w /var/log/traffic_%Y%m%d.pcap -G 86400 -W 7 & - 分析历史抓包文件,提取所有活跃的协议和端口:
这里tshark -r /var/log/traffic_2024*.pcap -T fields -e ip.proto -e tcp.dstport -e udp.dstport | \ awk '{if($1=="6") print "TCP/"$2; else if($1=="17") print "UDP/"$3;}' | \ grep -v "/" | sort | uniqip.proto里6代表TCP,17代表UDP,最终会输出类似TCP/80、UDP/5678的结果。
2. 利用iptables连接日志(适合记录新连接)
如果之前配置了iptables记录新的网络连接,那可以直接从系统日志里提取数据:
- 先配置
iptables规则(需要root权限),记录所有新入站/出站连接:
日志会默认写入iptables -A INPUT -m state --state NEW -j LOG --log-prefix "NEW_IN_CONN: " iptables -A OUTPUT -m state --state NEW -j LOG --log-prefix "NEW_OUT_CONN: "/var/log/syslog或/var/log/messages。 - 从上周的日志文件里提取活跃端口和协议:
grep -E "NEW_IN_CONN:|NEW_OUT_CONN:" /var/log/syslog.1 /var/log/syslog | \ awk '{ for(i=1;i<=NF;i++){ if($i ~ /PROTO=/) {proto=$i; sub(/PROTO=/,"",proto)} if($i ~ /DPT=/) {port=$i; sub(/DPT=/,"",port)} } if(proto ~ /(TCP|UDP)/ && port != "") print proto"/"port }' | sort | uniq
3. 定时记录ss输出(适合监听端口+活跃连接)
ss是netstat的现代替代工具,我们可以用定时任务每天记录一次当前的活跃端口和连接:
- 添加cron定时任务(执行
crontab -e编辑):
这个任务会每天凌晨0点记录一次所有TCP/UDP的活跃连接和监听端口。0 0 * * * ss -tua > /var/log/active_ports_$(date +%Y%m%d).log - 合并上周的记录并提取结果:
cat /var/log/active_ports_2024*.log | \ grep -E "^tcp|^udp" | \ awk '{split($5, addr, ":"); print $1"/"addr[2]}' | \ sort | uniq
注意:如果你之前没有提前配置抓包、日志或定时任务,是没法回溯上周的历史数据的,所以建议现在就把监控手段搭起来,方便以后查询!
备注:内容来源于stack exchange,提问作者Numid
相关产品推荐
相关产品推荐

