![在移动服务器之前记录网络连接?](https://linux22.com/image/575391/%E5%9C%A8%E7%A7%BB%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E5%89%8D%E8%AE%B0%E5%BD%95%E7%BD%91%E7%BB%9C%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
我们正在升级旧的数据库服务器,但想确保更新连接到该服务器的所有其他服务器上的代码。我正在考虑镜像网络端口并记录连接到该服务器的 IP 地址。我考虑过在服务器本身上启用日志记录,但我不想影响其性能,因为它仍在生产中。
有没有推荐的软件可以用来记录 IP 地址?可以是 Windows、Linux、FreeBSD、VM、LiveCD 或其他软件。只要它能在 x86 兼容的机器上运行,我就应该能够运行它。
答案1
数据库服务器本身运行的是什么操作系统?如果是 Linux,您可以在本地防火墙配置中添加一条日志记录规则,对服务器的影响最小。类似以下内容:
iptables -A INPUT -m state --state NEW -p tcp --dport <yourdbport> -j LOG --log-prefix "[database] "
您可以添加-m limit --limit 4/s
限制此规则以仅记录 4 次/秒(等等),如果连接速率很高,这将防止它占用所有 IO。这将记录如下行到 syslog:
[database] IN=eth0 OUT= MAC=00:16:3c:21:7c:f1:00:d0:00:6f:8c:00:08:00 SRC=a.b.c.d
DST=w.x.y.z LEN=48 TOS=0x00 PREC=0x00 TTL=114 ID=16448 DF PROTO=TCP SPT=59871
DPT=5900 WINDOW=8192 RES=0x00 SYN URGP=0
您想要的信息就是该SRC=
字段。
如果您设置了单独的 Linux(或 FreeBSD)系统来接收来自镜像端口的流量,则可以使用它tcpdump
来记录 IP 地址。例如:
tcpdump -w record_of_connections -i eth0 \
dst port <yourdbport> and 'tcp[tcpflags] & tcp-syn != 0'
这将匹配所有到端口的数据包您的数据库端口设置了 SYN 标志的数据包(例如,它们是新的连接尝试)。对文件运行此操作后,您可以像这样提取 IP 地址:
tcpdump -r record_of_connections -n
这将产生如下行:
15:07:40.808035 IP 10.243.16.190.53967 > 10.243.18.22.http: Flags [S],
seq 1235802021, win 5840, options [mss 1380,sackOK,TS val 3739192250
ecr 0,nop,wscale 7], length 0
其中字段为:
<time> <protocol> <src_addr>.<src_port> > <dest_addr>.<dest_port>: ...
这意味着你可以像这样获取源 IP 地址:
tcpdump -r record_of_connections -n |
awk '{print $3}' |
sed 's/\.[^.]*$//' |
sort -u
这sort -u
会为您提供一个唯一的地址列表。