在服务器上查看别人链接的IP地址,最直接的方法是查看服务器日志(如Nginx、Apache访问日志)或使用实时网络连接命令(如ss、netstat),通过这些工具能精确捕捉到发起连接的对端IP。
服务器查看ip地址命令:先分清“链接”是什么
很多人问“怎么在服务器上查看别人链接的ip地址”,链接”分两种情况,第一种是别人访问了你的网站或服务,服务器作为服务端,记录下访客IP,第二种是你的服务器主动向外发起连接,需要查看当前建立的TCP/UDP连接对端IP,两种场景用的命令完全不同,先搞清楚需求再动手。
以最常见的Linux服务器为例,多数生产环境跑着Nginx或Apache,查看历史访客IP,直接翻日志文件,Nginx默认日志路径在/var/log/nginx/access.log,Apache一般在/var/log/apache2/access.log或/var/log/httpd/access.log,用tail -n 100 /var/log/nginx/access.log就能看到最近100条访问记录,每条记录的第一字段就是对方IP。
如果想看当前实时连接,用ss -n或netstat -tunp,这两个命令能列出服务器此刻所有活跃连接,包括本地地址、对端地址和进程PID,执行ss -n | grep ESTAB可以看到所有建立状态的连接,对端IP就是你要找的,如果你只想看特定端口,加上-s参数过滤,比如ss -n -s 443显示所有443端口的连接,行业共识认为,ss命令比netstat更高效,在高并发服务器上响应更快,而且很多新版系统默认不再内置netstat,所以优先记住ss。
如何通过服务器查对方ip:三种场景实操
网站被爬虫或恶意请求骚扰
打开日志文件,用awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20,这条命令组合能统计出访问次数最多的前20个IP,如果某个IP的请求量异常大,比如每秒发起几十次请求,大概率是爬虫或攻击源,用grep "192.168.1.100" /var/log/nginx/access.log单独查看该IP的所有请求记录,能看到它具体请求了哪些路径、访问了多长时间。
针对恶意IP,直接防火墙封掉,CentOS/RHEL系用firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.100 reject',Ubuntu/Debian系用ufw deny from 192.168.1.100,封完后记得重载防火墙,CentOS执行firewall-cmd --reload,Ubuntu执行ufw reload。
服务器主动连接外部,查对方IP
这种情况多见于服务器需要调用外部API、连接数据库或下载文件,用ss -n | grep :80或netstat -tunp | grep :443能看到处于SYN-SENT或ESTAB状态的连接,对端IP和端口一目了然,如果连接已经关闭,但你想知道刚才访问过哪个IP,可以在
/proc/net/tcp和/proc/net/tcp6里翻历史记录,不过这个文件内容不直观,需要配合十六进制转换,一般不建议新手操作。
更省事的方法是用lsof -i,按进程名过滤,比如服务器上跑着一个Java程序,你想知道它正在和哪些IP通信,先ps -ef | grep java找到PID,然后lsof -i -p PID列出该进程所有网络连接,这个命令能同时显示TCP、UDP的连接状态和对端地址,排查程序异常外联非常实用。
临时借用服务器抓包看IP
如果以上命令都查不到你想要的IP,说明流量可能不经过服务器本机日志,这时用抓包工具直接看网络层数据,最简单的是tcpdump,先安装(yum install tcpdump或apt install tcpdump),然后用tcpdump -i eth0 -n -nn port 8080监听8080端口的流量,抓包结果中,168.1.100.52340 > 123.45.67.89.8080: Flags [S]表示源IP是192.168.1.100,目标IP是123.45.67.89。
抓包适合分析加密流量之外的信息,比如TCP握手、UDP数据包,需要注意权限,一般要root用户或sudo执行,抓包文件可以用-w /tmp/cap.pcap保存,再用Wireshark本地分析,适合需要向技术团队展示证据的场景。
服务器查询ip地址方法:日志、命令和监控工具对比
| 方法 | 适用场景 | 优势 | 局限 |
|---|---|---|---|
| 查看访问日志 | 网站访客IP统计 | 历史数据完整,可追溯 | 只能看到HTTP层请求 |
ss / netstat |
当前实时连接 | 即时准确,覆盖所有协议 | 历史连接无法查看 |
lsof -i |
按进程查连接 | 精准定位程序行为 | 需要知道目标PID |
tcpdump 抓包 |
深度分析流量 | 能看到原始数据包 | 命令复杂,文件占用大 |
从查询成本看,日志是最省力的,只要服务器不停服,日志文件会一直记录,统计发现,大多数服务器日志轮转周期是7天到30天,超过这个时间的日志会被自动清理,如果你需要长期留存,建议配置日志集中存储,比如用rsyslog把日志发送到专门的日志服务器,或者用云厂商的日志服务。
从实时性看,ss -n的查询结果秒出,在排查DDoS攻击时,先用ss -n state established '( dport = :80 or sport = :80 )'快速找出80端口所有活跃连接,再统计数量,如果连接数超过几万个,基本能确认正在遭受攻击,此时不要手动一个个封IP,用防火墙的速率限制模块(如
iptables的hashlimit)按IP维度限制每秒新建连接数,比手动封禁更高效。
常见坑:为什么查到的IP不是真实用户IP
很多站长会发现,日志里的IP地址全是类似0.0.1或内网IP,根本看不到外部访客,这是因为你的服务器前面挂了CDN、负载均衡或反向代理,这时访问日志记录的是代理服务器的IP,不是用户的真实IP。
解决办法是看HTTP头里的X-Forwarded-For或X-Real-IP字段,Nginx需要先配置log_format,在日志格式中加入$http_x_forwarded_for变量,配置方法:编辑/etc/nginx/nginx.conf,在http块里设置log_format main '$remote_addr - $http_x_forwarded_for [$time_local] ...',然后重载配置,之后日志里第二个IP字段就是真实用户IP,但要注意,如果CDN厂商没有传递正确的X-Forwarded-For头,这个字段可能被伪造,业内专家指出,在生产环境需同时校验CDN的回源IP白名单,否则攻击者可以伪造头信息绕过封禁。
另一个坑是IPv6,现在相当一部分访客使用IPv6地址,日志里显示的是一长串十六进制地址,比如2408:XXXX:XXXX:XXXX,用ss -n时,IPv6地址用方括号表示,例如[2408:8000:1000:2000]::1:443,防火墙封禁时也要区分协议,ufw deny from 2408:8000:1000:2000::1和IPv4的写法不同,别照搬。
服务器查看别人链接ip地址的进阶技巧
用Web日志分析工具自动定位异常IP
手动敲命令适合临时排查,但如果你需要定期分析IP规律,可以用GoAccess或Nginx Top这类工具,安装GoAccess后,一条goaccess /var/log/nginx/access.log -o /tmp/report.html --real-time-html就能生成可视化报告,按IP维度展示访问量、请求路径、User-Agent等,这些工具还能自动标注出同一IP的并发连接数,比肉眼扫日志快得多。
利用系统审计守护进程记录外连行为
如果你担心服务器上有未知程序偷偷向外连IP,配置auditd,默认路径/etc/audit/audit.rules,添加一条规则:-w /usr/bin/curl -p x -k /tmp/curl_exec,监听curl命令的执行,当有进程调用curl时,审计日志会记录调用者、目标IP和时间戳,虽然不能直接看到网络层的IP,但结合lsof -i就能把“哪个程序、在什么时间、连到了哪个IP”串起来。
查IP地理位置和归属
拿到IP后,很多人想知道对方在哪个城市,服务器上没有内置的地理位置库,需要联网查询,用curl ipinfo.io/123.45.67.89能返回JSON格式的归属地信息,包含国家、城市、运营商,不过这个接口有速率限制,不适合批量查询,批量查可以用
GeoLite2本地数据库,用MaxMind的免费版,配合Python脚本读取。
服务器查ip命令的注意事项和权限管理
生产服务器上执行网络查询命令,千万要当心。tcpdump抓包会消耗CPU,在高流量服务器上抓包可能导致网络中断。ss -n和log查询是只读操作,相对安全,涉及到封IP、改防火墙的操作,务必先在测试环境验证规则,如果你用的是云厂商的裸金属服务器,有些厂商的安全组在云平台层面,服务器内部的iptables规则可能不生效,需要去云控制台操作。
权限方面,普通用户可能无法执行ss -n看到所有进程的连接,因为网络命名空间限制,通常需要sudo或切换root,对于审计需求,建议使用类似sudo ss -n的方式,并且开启sudo的日志功能,方便后期追溯谁执行了查询命令。
把查IP变成日常运维动作
服务器上查看别人链接的IP并不难,核心是把日志、实时连接和抓包三种手段配合使用,日常巡检用ss -n快速看连接数,排查历史访客用tail和awk组合,被攻击时用tcpdump抓报文分析,养成定期查看access.log的习惯,很多异常早在页面卡顿之前就有征兆。能查到IP只是第一步,后续的封禁、告警和溯源才是真正保护服务器的环节。
服务器查看别人链接ip地址常见问题
问:服务器上查看别人链接ip地址的命令需要安装额外工具吗?
ss命令在大部分Linux发行版中默认集成在iproute2包中,无需单独安装。netstat在旧版系统中存在,新版可能要先yum install net-tools或apt install net-tools。tcpdump和lsof通常不会预装,需要手动安装。
问:为什么我执行ss -n看不到网页访问者的IP?
如果你通过浏览器访问的是服务器上的网站,而服务器前面有CDN或Nginx反向代理,那么ss -n看到的对端IP是代理节点的IP,不是浏览器用户的真实IP,真实IP记录在Nginx日志的X-Forwarded-For字段中,需要配合日志查看。
问:查到的IP被封禁后,对方换一个IP还能继续访问,怎么办?
单靠封IP很难根治,因为攻击者可以自动换IP,建议结合并发连接数和访问频率做动态封禁,比如用fail2ban监听日志,当同一个IP在短时间内触发多次异常规则时自动调用防火墙封禁,对于频繁更换IP的攻击,可以开启验证码或访问限速,从业务层面减少恶意请求的收益。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/684037.html





