嘿,一些脚本小子正在破坏我客户的游戏服务器(基于 Linux)。为了提供最好的服务,我正在寻找一种方法来找出破坏者发送了哪些数据包,以便我可以稍后阻止它。
因此,我需要一个简单的程序,它可以记录所有客户端发送或接收的每个数据包。正如我所说,游戏服务器软件基于 Linux(Ubuntu 9.10),因此该程序应该支持 Linux。游戏服务器软件不是开源的。
谢谢。
答案1
我想到的是Wireshark - 或者控制台版本的tshark。 两者都应该在Karmic Koala存储库中可用。
注意全部流量可能意味着几十、几百或几千 Mb/秒,因此请检查服务器的平均流量并做好准备(数据需要存储在某个地方,而不是在同一接口的网络上(否则您将生成无限循环的数据))。
编辑:正如@William所说,当且仅当游戏服务器本身崩溃,数据可能无法及时写入磁盘;但在这种情况下,它们甚至可能无法及时从另一个网络接口发送出去。在我看来,这种情况发生的可能性比应用程序崩溃的可能性要小,但如果是这种情况,我会这样做:
在服务器前面放置另一台具有两个 NIC 的计算机,将它们桥接在一起并以混杂模式在该主机上捕获(这些接口甚至不需要有 IP 地址)。
[game server[eth0]]------[[eth1]capturing computer[eth0]]-----[[eth1]your router, the Net etc]
我在这里做的是:捕获计算机假装您的游戏服务器和路由器之间只有一个网络段(尽管现在物理上有两个)。因此,捕获计算机将看到游戏服务器和路由器之间的所有流量,但 TCP 和 UDP 流量本身不会改变。现在,即使游戏服务器崩溃,您仍将拥有所有先前的流量。
所述方法可能会稍微减慢线路速度(因为捕获计算机必须来回传输数据包),但除非您处理千兆吞吐量,否则这种情况不会太明显。
答案2
您可以使用 tcpdump 来记录数据包。
针对流量分析的一个选项可能是 snort (http://www.snort.org/)。