在Linux系统中访问过特定端口的IP地址可以通过多种方法实现,以下是一些常用的工具和技术,涵盖基础命令和进阶分析场景:
1. netstat 命令
适用于实时监控或历史连接分析:
bash
netstat -tuln | grep <端口号>
-t 显示TCP连接,-u 显示UDP连接,-l 列出端口,-n 禁用域名解析(直接显示IP)。
查看已建立的连接(包含远程IP):
bash
netstat -anp | grep :<端口号>
注意:较新系统推荐使用 `ss` 替代 `netstat`。
2. ss 命令(现代替代方案)
高效查看socket连接:
bash
ss -tulnp | grep <端口号>
-a 显示所有连接(含ESTABLISHED状态),-p 显示进程信息。
筛选特定协议的远程IP:
bash
ss -tn src :<端口号>
3. lsof 命令
通过进程和文件描述符查看:
bash
lsof -i :<端口号>
输出包含COMMAND(进程名)、PID(进程ID)、USER(用户)及远程IP(如 `192.168.1.100:12345`)。
4. tcpdump 抓包分析
实时捕获经过端口的流量:
bash
tcpdump -i eth0 port <端口号> -nn
-nn 禁用端口和IP的域名解析,-w 保存抓包数据供后续分析(如Wireshark)。
提取源IP示例:
bash
tcpdump -i eth0 port 80 -nn | awk '{print $3}' | cut -d. -f1-4
5. 防火墙日志分析
若使用iptables/nftables,可通过日志记录访问:
bash
iptables -A INPUT -p tcp --dport <端口号> -j LOG --log-prefix "PORT_ACCESS: "
日志通常位于 `/var/log/syslog` 或 `/var/log/messages`,使用 `grep "PORT_ACCESS:"` 过滤。
6. 审计日志(auditd)
配置审计规则记录端口访问:
bash
auditctl -a exit,always -F arch=b64 -S connect -F a2=<端口号>
查询日志:
bash
ausearch -sc connect -k port_audit | grep -E "saddr=|dport="
7. 第三方工具
fail2ban:自动封禁异常IP,日志在 `/var/log/fail2ban.log`。
GoAccess:分析Nginx/Apache日志,可视化展示访问IP。
扩展知识:
连接状态:`TIME_WAIT` 表示连接已关闭但未完全释放,`ESTABLISHED` 为活跃连接。
高并发场景:使用 `ss -s` 查看总连接数,或通过 `/proc/net/tcp` 文件解析原始数据。
安全建议:长期监控建议结合ELK(Elasticsearch+Logstash+Kibana)搭建日志分析平台。
每种工具适用场景不同,根据需求选择实时监控(tcpdump)、历史分析(日志)或深度审计(auditd)。