读取,更改和重新发送tcp通信的最佳方法是什么?
例如,我有一个服务器应用程序告诉主服务器它在端口3209上通过TCP发送数据包。它发出“我还活着,我的ip是xxx.xxx.xxx.xxx而我目前有3个客户与我联系。“然后主服务器响应,“Hello xxx.xxx.xxx.xxx我在那里见到你。”
服务器将MITM发送到主服务器的最佳MITM方式是什么?我希望能够将“我活着”更改为“我已经改变”,甚至“当前3个客户连接”到“当前0个连接的客户”
任何想法都表示赞赏,谢谢。
答案 0 :(得分:3)
没有必要发出那种信息。
首先,TCP是面向连接的,所以只要你有连接,你就会活着。
您可以使用TCPClient.Connected属性检查您是否仍然处于连接状态。
其次,TCP在IP上运行,所以在IP头中你可以找到发送者IP(在套接字属性中),所以不需要发送IP。
您可以使用TCPClient.Socket.RemoteEndPoint属性检查远程IP地址。
最后,您可能唯一感兴趣的是“3个客户端连接部分”,可以编码为简单的整数传输。也就是说,听起来是4个字节。
进入连接中间很棘手,与通信协议无关。老实说,这是一个很糟糕的工作,如果已经存在连接,你将不得不找到一种方法让客户端或服务器丢弃它,然后让服务器重新建立到你的MIDM。更多但是,如果直接连接到IP地址,你将不得不以某种方式弄乱路由器表以获得成功,如果它不是DNS中毒可能对你有用......无论如何不是一件容易的事。
这些只是想法......它取决于网络的类别,如果你有物理访问权限,如果客户端和服务器相互信任(如果它们是你的应用程序)等等......我认为所有这些都是道德或教育至少......:)
答案 1 :(得分:0)
查看SharpPcap或任何其他数据包捕获/注入库。
为了MITM,您必须强迫客户认为您是服务器和服务器,认为您是客户端。为此,您必须按照here所述向两台机器发送ICMP数据包。然后,您将捕获数据包,修改它们并将它们注入网络(使用正确的MAC地址)。
答案 2 :(得分:0)
选择一个不同的工具 - 这是一个太低级别的事情,在C#中尝试。使用Windows Filtering Platform
可以实现此类功能(在Vista及更高版本中)