面试碰到的问题,如何知道你的服务器在一段时间内和哪些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 }' | awk -F ":" '{print }' | sort -n | uniq -c| sort -t " " -k 1 -nr
這樣可以找到已經建立的tcp通訊的,並且已經按連結的次數從大到小排序了 2. 如果是查看UDP通信,就無需考慮TCP通信的狀態,直接查詢即可:
netstat -anu | awk -F " " '{print }' | awk -F ":" '{print }' | 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