C#更改传入和传出的TCP通信

时间:2011-02-25 08:27:55

标签: c# tcp port

读取,更改和重新发送tcp通信的最佳方法是什么?

例如,我有一个服务器应用程序告诉主服务器它在端口3209上通过TCP发送数据包。它发出“我还活着,我的ip是xxx.xxx.xxx.xxx而我目前有3个客户与我联系。“然后主服务器响应,“Hello xxx.xxx.xxx.xxx我在那里见到你。”

服务器将MITM发送到主服务器的最佳MITM方式是什么?我希望能够将“我活着”更改为“我已经改变”,甚至“当前3个客户连接”到“当前0个连接的客户”

任何想法都表示赞赏,谢谢。

3 个答案:

答案 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及更高版本中)