Linux查看网站访问IP的命令大全

以下是Linux下查看网站访问IP的常用命令,涵盖实时监控、统计分析、日志分析等多种场景。

一、实时查看当前访问IP

1. 查看当前80/443端口的活动连接
复制代码
# 查看所有HTTP/HTTPS连接的IP
netstat -tn | grep ':80\|:443' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

# 使用ss命令(更快,推荐)
ss -tn | grep ':80\|:443' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
2. 实时监控新连接
复制代码
# 每2秒刷新一次,查看IP连接数
watch -n 2 'ss -tn | grep ":80\|:443" | awk "{print \$5}" | cut -d: -f1 | sort | uniq -c | sort -nr | head -20'

# 监控连接状态分布
watch -n 2 'ss -tan | grep ":80\|:443" | awk "{print \$1}" | sort | uniq -c'
3. 查看ESTABLISHED状态的连接(已建立的连接)
复制代码
# 只看已建立的连接
netstat -tn | grep ':80\|:443' | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

# ss版本
ss -tn state established '( dport = :80 or dport = :443 )' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

二、Web日志分析(最常用)

1. 查看访问日志中的IP
复制代码
# Nginx日志位置
tail -100 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

# Apache日志位置
tail -100 /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

# 如果日志格式不同,可能需要调整字段位置
# 常见格式:$remote_addr(客户端IP)通常是第一个字段
2. 统计访问量TOP的IP
复制代码
# Nginx - 统计所有IP访问次数,降序显示前20
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

# Apache
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -20

# 统计指定时间段(比如今天)
awk '{print $1}' /var/log/nginx/access.log | grep "$(date +%d/%b/%Y)" | sort | uniq -c | sort -nr | head -20
3. 统计指定时间段的IP访问
复制代码
# 查看今天10:00到11:00的访问IP
awk '/10\/Mar\/2026:10:/ {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

# 查看最近10分钟的IP
tail -10000 /var/log/nginx/access.log | awk '{print $4, $1}' | grep "$(date +%d/%b/%Y:%H:%M -d '10 minutes ago')" | awk '{print $2}' | sort | uniq -c | sort -nr
4. 统计去重IP数量
复制代码
# 统计总共有多少个不同IP访问过
awk '{print $1}' /var/log/nginx/access.log | sort -u | wc -l

# 统计今天的独立IP数
awk '/$(date +%d\/%b\/%Y)/ {print $1}' /var/log/nginx/access.log | sort -u | wc -l

三、按条件过滤IP

1. 排除内部IP,只统计公网IP
复制代码
# 排除内网IP(192.168.x.x, 10.x.x.x, 172.16-31.x.x)
awk '{print $1}' /var/log/nginx/access.log | grep -v "^192\.168\|^10\.\|^172\.1[6-9]\|^172\.2[0-9]\|^172\.3[0-1]" | sort | uniq -c | sort -nr | head -20
2. 查看访问特定URL的IP
复制代码
# 查看访问某个页面的IP
grep "/index.html" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

# 查看访问API接口的IP
grep "/api/" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
3. 查看返回特定状态码的IP
复制代码
# 查看访问返回404的IP
grep " 404 " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

# 查看返回500错误的IP
grep " 500 " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

# 查看返回200成功的IP
grep " 200 " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
4. 查看POST请求的IP(常用于攻击检测)
复制代码
# 查看POST请求的IP
grep "POST" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

# 查看表单提交的IP
grep "POST.*login" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

四、高级统计与分析

1. 使用awk按小时统计IP访问频率
复制代码
# 按小时统计每个IP的请求数
awk '{print $4, $1}' /var/log/nginx/access.log | awk -F: '{print $1":"$2, $NF}' | sort | uniq -c | sort -nr | head -30
2. 查看单IP的详细访问记录
复制代码
# 查看指定IP的所有访问记录
grep "192.168.1.100" /var/log/nginx/access.log

# 统计指定IP的访问次数
grep "192.168.1.100" /var/log/nginx/access.log | wc -l

# 查看指定IP的访问URL分布
grep "192.168.1.100" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr
3. 使用GoAccess生成可视化报告
复制代码
# 安装GoAccess
apt install goaccess   # Debian/Ubuntu
yum install goaccess   # CentOS/RHEL

# 终端交互式分析
goaccess /var/log/nginx/access.log --log-format=COMBINED

# 生成HTML报告
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
4. 使用AWStats分析
复制代码
# 安装AWStats
apt install awstats

# 配置后访问
# http://your-server/awstats/awstats.pl

五、快速检测DDoS/CC攻击

1. 检测高频访问IP
复制代码
# 检测单IP请求频率(超过100次/分钟需警惕)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | awk '$1 > 100 {print}'

# 检测1分钟内的请求量(需要先确定时间范围)
tail -10000 /var/log/nginx/access.log | awk '{print $4, $1}' | awk -F: '{print $2":"$3, $NF}' | sort | uniq -c | sort -nr | head -20
2. 检测异常User-Agent的IP
复制代码
# 查看没有User-Agent的请求(可能是攻击脚本)
awk '$12 == "-" {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

# 查看特定User-Agent的IP
grep -i "python" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
3. 检测异常请求的IP
复制代码
# 检测大量404错误的IP
grep " 404 " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20

# 检测大量500错误的IP
grep " 500 " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20

六、实用脚本示例

1. 实时监控并自动封禁高频IP
复制代码
#!/bin/bash
# 监控1分钟内请求超过200次的IP并封禁

while true; do
    # 获取最近1分钟的IP统计
    tail -10000 /var/log/nginx/access.log | \
    awk -v now=$(date +%d/%b/%Y:%H:%M) 'index($4, now) == 1 {print $1}' | \
    sort | uniq -c | sort -nr | while read count ip; do
        if [ $count -gt 200 ]; then
            # 检查是否已封禁
            if ! iptables -L INPUT -n | grep -q "$ip"; then
                echo "封禁IP: $ip (请求数: $count)"
                iptables -A INPUT -s $ip -j DROP
            fi
        fi
    done
    sleep 60
done
2. 定时生成IP统计报告
复制代码
#!/bin/bash
# 每天生成IP访问报告

DATE=$(date +%Y%m%d)
LOG_FILE="/var/log/nginx/access.log"
REPORT="/var/www/html/reports/ip_report_$DATE.html"

echo "<html><body>" > $REPORT
echo "<h2>IP访问统计报告 - $DATE</h2>" >> $REPORT
echo "<pre>" >> $REPORT
awk '{print $1}' $LOG_FILE | grep "$(date +%d/%b/%Y)" | sort | uniq -c | sort -nr | head -50 >> $REPORT
echo "</pre></body></html>" >> $REPORT

七、快速确认是否遭受攻击

首先执行快速诊断命令,判断服务器是否正在遭受攻击

1. 检查当前连接数
复制代码
# 查看80/443端口的连接数(正常应在数百以内)
ss -tan state established | grep ":80\|:443" | awk '{print $4}' | cut -d':' -f1 | sort -n | uniq -c | sort -nr | head -20

# 检查SYN_RECV状态连接数(SYN Flood攻击特征)
ss -tan state syn-recv | wc -l

如果单个IP连接数异常高(数百甚至数千),或SYN_RECV连接数超过正常值,极有可能是DDoS攻击

2. 实时观察访问日志
复制代码
# 实时查看Web访问日志
tail -f /var/log/nginx/access.log      # Nginx
tail -f /var/log/apache2/access.log    # Apache

# 过滤特定状态码(如大量404可能为扫描)
tail -f /var/log/nginx/access.log | grep " 404 "
3. 统计高频访问IP
复制代码
# Nginx日志 - 统计访问量前20的IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

# Apache日志
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -20
4. 检查带宽占用
复制代码
# 安装iftop后实时查看带宽占用
iftop -i eth0 -nNP

# 按进程查看网络占用
nethogs

八、定位攻击类型与可疑来源

1. 按时间窗口聚合请求速率
bash 复制代码
# 查看每秒请求量,识别突发流量
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f2-4 | uniq -c | sort -nr | head
2. 定位被高频访问的目标URL
bash 复制代码
# 查看被集中请求的路径
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

常见攻击目标包括:

  • 登录接口(/login/admin

  • 动态接口(/api/*

  • 静态资源被异常刷量

3. 识别恶意扫描与探测
bash 复制代码
# 检查SQL注入特征
grep -i "union.*select\|select.*information_schema\|or.*1.*=" /var/log/nginx/access.log

# 检查路径遍历/文件包含
grep -i "\.\./\|/etc/passwd\|/proc/self" /var/log/nginx/access.log

# 检查Webshell上传扫描
grep -i "\.php\|\.jsp\|b374k" /var/log/nginx/access.log
4. 检查错误日志中的异常
bash 复制代码
# 统计对不存在资源的请求(404扫描)
grep "File does not exist" /var/log/apache2/error.log* | awk '{print $NF}' | sort | uniq -c | sort -nr | head -20

九、网络层交叉验证

1. 查看当前所有连接的源IP
bash 复制代码
# 查看每个远端IP的连接数
netstat -an | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20

# 如netstat未安装,使用ss命令
ss -tun | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20
2. 抓包分析攻击特征
bash 复制代码
# 抓取80端口流量,分析请求频率
tcpdump -i eth0 -nn port 80 -c 1000 | grep -i "GET\|POST" | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr

# 检测SYN Flood特征
tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0'
3. 识别SYN Flood攻击
bash 复制代码
# 统计处于SYN_RECV状态的IP
ss -tan state syn-recv | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10

十、使用自动化分析工具

1. GoAccess - 可视化日志分析
bash 复制代码
# 安装
apt install goaccess   # Debian/Ubuntu

# 生成HTML报告
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED

# 终端实时分析
goaccess /var/log/nginx/access.log
2. FastNetMon - 高性能DDoS检测器

FastNetMon是一个高性能的DDoS攻击检测工具,支持NetFlow、IPFIX、sFLOW,能自动检测异常流量并触发告警或自动封禁

bash 复制代码
# Debian/Ubuntu安装
apt install fastnetmon

# 配置检测阈值
# 编辑 /etc/fastnetmon.conf
threshold_packets = 10000   # 每秒包数阈值
threshold_mbps = 100        # 带宽阈值Mbps
3. Fail2ban - 自动封禁恶意IP
bash 复制代码
# 安装
apt install fail2ban

# 配置Nginx/CC攻击防护
# /etc/fail2ban/jail.local
[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
logpath = /var/log/nginx/access.log
maxretry = 100
bantime = 3600
findtime = 60

十一、应急处置措施

1. 临时封禁恶意IP
bash 复制代码
# 使用iptables封禁单个IP
iptables -A INPUT -s 192.168.1.100 -j DROP

# 封禁IP段
iptables -A INPUT -s 192.168.1.0/24 -j DROP

# 保存规则
iptables-save > /etc/iptables/rules.v4
2. 启用速率限制
bash 复制代码
# 使用iptables限制单个IP连接数
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROP

# 限制新建连接速率
iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 60 --hitcount 100 -j DROP
3. Nginx速率限制
bash 复制代码
# /etc/nginx/nginx.conf
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location / {
        limit_req zone=mylimit burst=20 nodelay;
        limit_conn addr 10;
    }
}

十二、命令速查表

需求 命令
实时查看当前连接IP `ss -tn
统计日志中IP访问量TOP20 `awk '{print $1}' /var/log/nginx/access.log
统计独立IP总数 `awk '{print $1}' /var/log/nginx/access.log
查看特定IP的访问记录 grep "IP地址" /var/log/nginx/access.log
查看404错误的IP `grep " 404 " /var/log/nginx/access.log
查看POST请求的IP `grep "POST" /var/log/nginx/access.log
实时监控新连接 `watch -n 2 'ss -tn
生成可视化报告 goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED

相关推荐
晓13133 小时前
第四章 TypeScript 类型声明文件与 React 运用
前端·react.js·typescript
大雷神3 小时前
HarmonyOS APP<玩转React>开源教程二十一:测验服务层实现
前端·react.js·开源·harmonyos
apcipot_rain3 小时前
事无巨细地解释一个vue前端网页
前端·javascript·vue.js
Rondox3 小时前
wake on lan 电脑局域网内远程开机
服务器·网络·电脑
han_3 小时前
JavaScript设计模式(三):代理模式实现与应用
前端·javascript·设计模式
Saniffer_SH3 小时前
【高清视频】实验室搭建PCIe 6.0测试环境需要的retimer卡介绍
服务器·驱动开发·测试工具·fpga开发·计算机外设·硬件架构·压力测试
~欲买桂花同载酒~3 小时前
项目安装- React + TypeScript
前端·react.js·typescript
光辉GuangHui3 小时前
SDD 实践:OpenSpec + Superpowers 整合创建自定义工作流
前端·后端
sdm0704273 小时前
Linux-基础IO
linux·运维·操作系统·理解文件