TCP/IP 中 connect 的怪问题,高分求解(300分)

  • 主题发起人 OopsWare
  • 开始时间
O

OopsWare

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的计算机(Windows 2000)上有网卡A(192.168.1.x),网卡B(61.x.x.x),和
拨号设备C(218.58.13.x)三个网络设备分别帮定不同的IP。我需要通过拨号设备C
访问外网IP与网卡B地址相同的主机,如何实现?现在问题出在访问外部主机时,
只访问网卡B了。
有没有一个API可以使 connect 工作在指定的网络设备上?
我尝试在 connect 之前先把 Socket bind 到拨号设备C 上,失败。

急,请高手帮忙!
 
关注。建议将此问题提前。
 
设置静态路由, 看Route命令帮助...
 
在网上邻居的属性中将 网卡B 禁用,一切正常.
但 网卡B 是必须的.不能关啊.
 
把218.58.13.x的默认网关改成外网的地址。
 
我的主要意图是在网卡B上建一个服务,让某软件连接.再创建一个客户通过拨号设备C
去访问真正的主机,从中截取通讯内容.问题出在如何控制客户连接是走拨号设备C,而
不是也访问到网卡B.
网卡B是Win2k自带的虚拟网卡(MS LoopBack Driver),拨号设备C是ADSL虚拟拨号.
 
>>在网卡B上建一个服务,让某软件连接
这个软件是哪儿的,是本机上的吗?

我不太明白,您如何能截取通信内容呢?
 
如果两台主机能够ping通,connect是没问题的。
 
to zw84611:
被测试的程序是三方的。例如 MSN Messanger,他要连接 MSN 的主机。我将网卡B的
IP设置成MSN主机的IP。在本机写一个程序在网卡B上启动相同端口的Socket服务,这样
Messanger就会连接到我的程序,与我的程序通讯,同时我的程序通过拨号C创建一个到
真实的MSN主机的连接,把数据转发给MSN主机。如此便捕获了Messanger与MSN主机通讯
的所有信息。问题出在:由于网卡B上IP的存在,我不能创建到真实的MSN主机的连接。
我的问题是有没有一个API可以在调用connect之前,选择一下网络设备。

to chenxz:
ping是通的,启用网卡B就ping到本机,禁用网卡B就可以ping到远程的主机。
现在情况是connect连接到本机网卡B,而不是我所希望的远程主机。

to tseug:
网卡B禁用/启用后路由的确不一样,有没有API可以动态的修改路由。路由修改后
以前连接的Socket还能正常通讯吗?

 
connect不是要指定连接的主机吗?为什么会连接到本机网卡b?
你指向远程主机了吗?
 
远程的主机IP与网卡B的IP是一样的。connect首先连接了网卡B而不是远程的主机。
 
试试这样:

optval: integer;

optval:= 0;
setsockopt(s,SOL_SOCKET,SO_DONTROUTE,pchar(@optval),sizeof(optval))
 
使用route add 0.0.0.0 mask 0.0.0.0 拨号地址C
  route add 真实msn地址 mask 255.255.255.255 拨号地址以C
试试看!
 
能不能改变一下思路?
就是说不用三个网卡也实现了你的功能,可以吗?
 
我现在开始考虑用程序动态控制路由。网卡B也是必须的,因为远程主机的地址是固定的,
我在本机虚拟此主机,不使用虚拟网卡,多台计算机同时使用便出现IP地址冲突了。
但目前对路由了解甚浅,不知从何入手。

另外一种方法是使用假的WSOCK32.DLL去捕获程序的Socket操作。但发现那程序用的是
Socket2 的库,找到了WinSocket2的头文件后尝试发现,WS2_32.DLL中仍有几个函数
未公开。

不知道还有没其他截获IP包的办法.
 
尚未解决,以后再讨论,分分先。
 
顶部