84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
面试碰到的问题,如何知道你的服务器在一段时间内和哪些IP进行过连接,连接是包括tcp、udp之类的通信? linxu应该不会记录传输层的连接日志信息吧?
走同样的路,发现不同的人生
首先承认开始回答这个问题的时候,都没搞清楚问题所在,查日志确实是一个不负责任的回答,这里更新一下自己对这个问题的理解
我的建议也是使用netstat命令,man一下netstat可以看到这个命令的作用:“netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships”
查看服务器和哪些IP进行过连接: 1. 就TCP通信来说,我假定这里你问得是查询通过三次握手的连接,那可以用这个命令查看ip:
netstat -ant | grep 'ESTABLISHED' | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort -n | uniq -c| sort -t " " -k 1 -nr
这样可以查找已经建立的tcp通信的,并且已经按链接的次数从大到小排序了 2. 如果是查看UDP通信,就无需考虑TCP通信的状态,直接查询即可:
netstat -anu | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort -n | uniq -c | sort -t " " -k 1 -nr
man netstat
iptables 也可以记录日志的,不过看上去不太好过滤的样子。
nf_conntrack 会记录最近一段时间内的连接:
$sudo cat /proc/net/nf_conntrack
不过它超时时间的设置,具体可以看 sysctl.conf
$sudo sysctl -a | grep 'nf_conntrack_.*_timeout'
首先承认开始回答这个问题的时候,都没搞清楚问题所在,查日志确实是一个不负责任的回答,这里更新一下自己对这个问题的理解
我的建议也是使用netstat命令,man一下netstat可以看到这个命令的作用:“netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships”
查看服务器和哪些IP进行过连接:
1. 就TCP通信来说,我假定这里你问得是查询通过三次握手的连接,那可以用这个命令查看ip:
这样可以查找已经建立的tcp通信的,并且已经按链接的次数从大到小排序了
2. 如果是查看UDP通信,就无需考虑TCP通信的状态,直接查询即可:
man netstat
iptables 也可以记录日志的,不过看上去不太好过滤的样子。
nf_conntrack 会记录最近一段时间内的连接:
不过它超时时间的设置,具体可以看 sysctl.conf