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