1. 为什么需要查看网站访问IP?
作为Linux系统管理员或网站运维人员,查看访问IP是日常工作中最基础也最重要的操作之一。想象一下这样的场景:你的网站突然出现异常流量,服务器负载飙升;或者你需要分析用户地域分布来优化CDN策略;又或者安全团队通知你某个IP正在进行暴力破解。这些情况下,快速准确地获取访问者IP信息就成为解决问题的第一步。
我管理过多个高流量网站,曾遇到过多次DDoS攻击和爬虫泛滥的情况。通过实时监控访问IP,我们成功识别并屏蔽了恶意流量源,将服务器负载从90%降到正常水平。这种实战经验让我深刻理解到,掌握各种查看IP的命令就像医生会用听诊器一样,是运维人员的基本功。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实时监控类命令
2.1 tail -f 实时查看日志
这是我最常用的实时监控命令,特别是在突发流量激增时。假设你的Nginx日志路径是/var/log/nginx/access.log:
bash复制tail -f /var/log/nginx/access.log | awk '{print $1}'
这个命令组合的精妙之处在于:
tail -f会持续输出日志文件新增内容awk '{print $1}'提取每行的第一个字段(默认是IP地址)
提示:Nginx日志格式可能自定义,先用
head -n 1查看日志格式确认IP位置
我曾在一次紧急事件中,用这个命令配合grep快速定位到攻击源IP:
bash复制tail -f /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
这个管道组合能实时统计每个IP的访问频次,按访问量排序,异常IP一目了然。
2.2 tcpdump 抓包分析
当需要更底层的网络分析时,tcpdump是利器。以下是抓取80端口访问的IP:
bash复制sudo tcpdump -ni any port 80 | awk '{print $3}' | cut -d. -f1-4
参数说明:
-n不解析主机名(加快处理速度)-i any监听所有网卡port 80只捕获HTTP流量
这个命令的产出是实时流动的IP列表。在我的经验中,tcpdump对系统性能影响较大,不建议在生产环境长时间使用,更适合短期问题诊断。
3. 日志分析类命令
3.1 使用awk提取IP
Apache/Nginx日志分析是日常工作重头戏。假设日志格式为:
127.0.0.1 - - [10/May/2023:08:23:12 +0000] "GET / HTTP/1.1" 200 1234
提取IP并统计出现次数:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -nr
这个经典组合的每个环节都值得理解:
awk '{print $1}'提取第一列(IP)sort将IP排序(uniq的前提)uniq -c统计每个唯一IP出现次数sort -nr按次数降序排列
我曾用这个命令发现一个爬虫IP在24小时内访问了87万次,及时封禁后CPU负载立即下降60%。
3.2 使用cut命令处理自定义格式
有些日志可能用"|"分隔字段,比如:
2023-05-10|08:23:12|127.0.0.1|GET /|200|1234
提取第三列IP:
bash复制cut -d'|' -f3 access.log | sort | uniq -c
关键参数:
-d'|'指定分隔符-f3选择第三字段
4. 网络连接分析命令
4.1 netstat 查看活跃连接
虽然netstat逐渐被ss取代,但在老系统上仍很有用:
bash复制netstat -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
参数说明:
-t只显示TCP连接-n不解析主机名awk提取第五列(远程地址:端口)cut去掉端口部分
4.2 ss 命令(现代替代方案)
ss是netstat的现代替代品,效率更高:
bash复制ss -tn | awk '{print $5}' | cut -d: -f1 | grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | sort | uniq -c
这里增加了grep -oE确保只匹配IP格式,避免异常数据干扰。
5. 高级分析与可视化
5.1 使用GoAccess进行可视化分析
GoAccess是我最喜欢的日志分析工具之一,能生成漂亮的HTML报告:
bash复制goaccess /var/log/nginx/access.log --log-format=COMBINED -o report.html
安装方法:
bash复制# Ubuntu/Debian
sudo apt install goaccess
# CentOS/RHEL
sudo yum install goaccess
报告包含:
- 每日/每小时访问量
- 访问量Top IP
- 请求的URL排名
- 用户代理分析等
5.2 使用ELK堆栈进行大规模分析
当服务器集群规模较大时,我推荐使用ELK(Elasticsearch+Logstash+Kibana)方案。虽然配置复杂,但能实现:
- 实时IP地理分布图
- 异常访问模式检测
- 长期趋势分析
基础配置步骤:
- Logstash配置Grok模式解析日志
- Elasticsearch建立索引
- Kibana创建可视化仪表板
6. 安全防护实战技巧
6.1 自动封禁恶意IP
结合上述命令和iptables可以实现自动防护:
bash复制# 找出1分钟内访问超过100次的IP
awk -v date="$(date +[%d/%b/%Y:%H:%M)" '$4 >= date && $4 < date + 60 {print $1}' access.log | sort | uniq -c | awk '$1 > 100 {print $2}' > bad_ips.txt
# 批量添加到iptables
while read ip; do iptables -A INPUT -s $ip -j DROP; done < bad_ips.txt
6.2 使用Fail2Ban自动化防护
Fail2Ban是我在生产环境必装的工具,配置示例:
ini复制[nginx-http-auth]
enabled = true
filter = nginx-http-auth
action = iptables[name=HTTP, port=http, protocol=tcp]
logpath = /var/log/nginx/error.log
maxretry = 3
findtime = 300
bantime = 3600
这会在5分钟内3次认证失败后封禁IP1小时。
7. 性能优化注意事项
在处理大日志文件时,我有几个经验分享:
- 使用LC_ALL=C加速排序:
bash复制LC_ALL=C sort access.log > sorted.log
这个技巧能让排序速度提升3-5倍,特别是在多核系统上。
- 避免多次读取大文件:
bash复制# 不好的做法:读取文件两次
grep "GET" access.log | awk '{print $1}'
grep "POST" access.log | awk '{print $1}'
# 好的做法:一次读取多次处理
awk '/GET|POST/ {print $1}' access.log
- 使用parallel并行处理:
bash复制cat big.log | parallel --pipe awk '{print $1}' | sort | uniq -c
8. 常用命令速查表
为了方便日常使用,我整理了最常用的命令组合:
| 场景 | 命令 | 说明 |
|---|---|---|
| 实时监控 | tail -f access.log | awk '{print $1}' |
实时显示访问IP |
| 统计排名 | awk '{print $1}' access.log | sort | uniq -c | sort -nr |
统计IP访问量排名 |
| 时间段分析 | awk -v start="[10/May/2023:08" -v end="[10/May/2023:09" '$4 >= start && $4 < end {print $1}' access.log |
分析特定时段IP |
| 连接监控 | ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c |
查看当前连接IP |
| 地理分布 | awk '{print $1}' access.log | sort -u | xargs -n1 geoiplookup |
查询IP地理位置 |
9. 疑难问题排查案例
去年我们遇到一个诡异问题:服务器响应变慢,但CPU、内存都正常。通过以下步骤最终定位问题:
- 首先用
ss -s查看总连接数,发现异常高 - 然后统计各IP连接数:
bash复制ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
- 发现某个IP建立了800多个连接
- 用
tcpdump -i eth0 host 1.2.3.4抓包分析 - 确认是客户端的连接池配置错误导致
这个案例让我明白,查看IP不仅是安全需求,也是性能调优的重要手段。
