读书人

端口转发缴获ip求指导

发布时间: 2013-01-04 10:04:17 作者: rapoo

端口转发,截获ip,求指导!
我有一个程序,socket写的,假设服务器端为B,客户端为C,那么B和C通过某端口(端口1)可以互相发送数据。这个程序已经实现,没有问题。

现在是这么一个情况,还有多台机器,用A来表示,通过VPN(因为不想设置IE代理,不知道还有没有其他方式)连接到B上某端口(端口2),然后再把数据传到B与C连接的端口上(端口1),转发给C,通过C与外网相连。

请教高手,现在有什么办法能实现这个端口转发?!
补充:好像有一些端口转发工具能实现数据转发,但是它不知道是哪台机器(比如A1,A2)请求的,所以C返回的数据无法返回到A1,A2。

如果介绍工具的话,最好是开源的,因为我要把代码整合起来。 谢谢!
[解决办法]
重新封包, 加一个自己的包头来表示通道:

A 与 B 建立连接后就为这个链接分配一个 ID. 然后 B 把数据重新封包, 在包头加上这个 ID. C 从包里面解析出这个 ID, 建立连接和外网通信, 把返回的内容也加上这个 ID 进行封包. B 收到后解析出这个 ID, 找到对应的 A 链接, 把原始数据发送给它.
[解决办法]
1、A1-An连接B端口1,B维护A与端口1之间的连接信息,每一个通信连接用一个标识来标识,如A1-B 1001,A2-B 1002.
2、B将与C建立连接,B与C之间建议的每一个通信连接用一个标识来标识,如B-C1 2001,B-C2 2002.
3、B选择A与C之间的会话,将1001与2001对应起来,将A1的数据包发送到C,从C的收到根据路标识2001找到1001,再发送到A1,
这样B就想当于A与C之间的路由器,维护之间的通信(两个连接),并为它们相互转发数据。
实质上路由器的实现就是基于类型的原理。希望对你有用,之前我曾开发过一个产品。

读书人网 >C++

热点推荐