2011-08-31 18 views
1

我正在做一个Linux上的服务器服务程序,它处理发送到它侦听的套接字的包。已经有一个旧的这样的服务在端口上执行它的工作,并且 我无法停止旧的服务器服务,我需要将这些软件包发送到旧服务器,并将它们发送到我的新服务器服务,以确保它能正常运行。我如何获得软件包并将它们反馈给我的新服务?有没有这样一个工具,或者是否有一些像tcpdump这样的工具已经提供的功能? 谢谢:)如何将网络接口或某个端口收到的包保存在文件中,并在需要时重新发送收到的包?

+0

尝试询问http://serverfault.com/也 – Quamis

回答

1

对于像UDP这样的无连接协议,您可以使用tcpdump记录数据并使用netcat重新发送数据。对于像TCP这样的面向连接的协议,我认为并不那么容易,因为TCP期望你的数据包在确认的确认号码中具有适当的值,这在你的记录数据包和新建立的TCP连接之间会有所不同。在这种情况下,您需要手动建立连接(即为此设置自定义应用程序)并仅重新发送有效负载。也许,有一些现成的应用程序(从tcpdump格式提取有效载荷并将其发送到远程),我不知道。但编写这样的应用程序很容易。

顺便说一句,如果你的服务器维持自己的某种排序顺序,即使是UDP,同样的事情也适用,重发包可能有你的服务器不希望接收到的序列号。

+0

感谢您的帮助,重新发送udp pkg对我来说已经足够了,但是您能更具体一些吗,如何使用tcpdump来存储一些软件包并使用netcat重新发送它们? – king6cong

+0

'tcpdump'有'-w'选项,请参阅它的联机帮助页。不幸的是,文件将包含无数据包的原始数据包,因此在将数据提供给netcat的标准输入之前,您需要自行将文件拆分为原始数据包。 –

相关问题