多网卡FTP测试,绑定本地IP地址

来源:互联网 发布:php图片投票系统源码 编辑:程序博客网 时间:2024/06/10 00:17

一台电脑可以同时有多个网络连接,如果不绑定指定的IP,系统就会按照默认路由表经过默认的网关进行数据的收发;

    拿一个简单的TCP通信程序来说,服务端需要在指定的端口进行监听,所以必须绑定指定的端口,而客户端创建的socket是连接指定的服务端,创建socket后直接调用connect()函数就可以连接到指定的服务端;系统会根据默认的路由和空闲的端口,让数据从指定的网关和端口出去;如果要从指定的网卡进行通信,可以在客户端创建socket后调用bind()绑定指定的IP和端口,然后在调用connet()连接指定的服务端.

    FTP也一样,都是TCP方式的数据传输,如果需要FTP客户端要指定从哪个网络连接进行测试(即指定从哪个网卡收发数据),可以在创建socket是调用bind()函数对本机的IP进行绑定,无论是内网的IP还是公网的IP,只要绑定本机上的IP就行了!

   还有一点很重要,就是调用bind()时绑定的端口要设为零,即让系统自己随机分配端口;FTP客户端连接服务器进行文件的上传和下载,需要和服务器建立两个通道:控制通道和数据通道.控制通道:传输FTP命令;数据通道:进行数据传输;一共有三个socket:负责命令通道的socket;负责数据传输的socket;建立数据通道时负责监听服务器连接的socket;三个socket在创建后都要绑定指定的网卡的IP,才可以从指定的网卡上进行收发数据.

   最后一点就是要设置路由表了.要将各个网卡destination为0.0.0.0的路由的metric值都设为1才行!要不然,绑定了一个网卡的IP,它的路由路径的metric(路由跳转数)不为1,则登录不了服务器;范例:route change 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 1;  192.168.1.1就是绑定网卡的网关;如果两个网卡都时同一个局域网内的就不用再设路由表,因为他们都走同一个网关的!

   修改(2010.06.24):修改路由表的时候,不能直接调用route change命令修改,而是先将需要修改的路由删除(例:route delete 0.0.0.0 mask 0.0.0.0 192.168.1.1 ),然后再添加新的路由(例:route add 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 1);直接修改会出现"创建数据通道失败"的错误!


转载自:http://hi.baidu.com/whandsome/blog/item/30de47f047dc45bda50f52da.html