在Windows平台有没有办法在发送数据之前知道自己是从那张网卡(或IP地址)发送的数据。
不要告诉说,先进行connect一下,这样效率不好。
因为Windows本身的一个命令router print可以打出自己的路由,我想能获取到这张路由表通过匹配网络地址应该就可以知道从那个IP出去吧?
大家给个办法吧,谢谢了!
7 个解决方案
#1
对方的目的IP地址和路由决定着你的数据从哪个网卡出去,路由可以手动配置也就是说你可以指定从哪个网卡出去。对于外部的一个主机A你的问题只有两个网卡都可达A时才有意义,这种情况如果不配置路由两个网卡出去都可能,随便告诉对方一个ip都可以(当然如果A不是同一局域网不能是内网IP)。
#2
是这样,假设网卡1可以到达网络A,网卡2可以到达网络B,网络A和网络B独立。但是目前不知道如何从系统中获取出网卡1能到达哪些网络?
如果知道目的地是否网卡1可达,当然可以发送网卡1的IP.
问题是,随便告诉一个IP地址就不可行了,内网地址告诉外部主机,那外部主机肯定连不通。
谢谢!
如果知道目的地是否网卡1可达,当然可以发送网卡1的IP.
问题是,随便告诉一个IP地址就不可行了,内网地址告诉外部主机,那外部主机肯定连不通。
谢谢!
#3
如果你的IP是如下的范围内,那么就是内网IP告诉外部主机没意义
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
169.254.0.0~169.254.255.255
如果不是,可以通过下面方法测试
1、打开命令行窗口,“开始”,“运行”,输入“cmd”;
2、在命令行窗口中输入 ping 对方IP地址;
3、查看路由表,输入route PRINT看看对方的IP有哪一个条路由决定,对应的Interface的IP就是你的哪个网卡绑定的IP;
4、如果你对3步骤看不明白,还可以打开两个网卡状态对话框,重复2可以看到报文从哪个网卡出去,对应网卡发送和接受报文数会在你Ping的过程不断变化;
5、ping一个包用抓包工具抓出来看看也可以;
6、最简单的方法就是让对方ping一下你的两个IP地址,哪个能ping通就用哪个。
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
169.254.0.0~169.254.255.255
如果不是,可以通过下面方法测试
1、打开命令行窗口,“开始”,“运行”,输入“cmd”;
2、在命令行窗口中输入 ping 对方IP地址;
3、查看路由表,输入route PRINT看看对方的IP有哪一个条路由决定,对应的Interface的IP就是你的哪个网卡绑定的IP;
4、如果你对3步骤看不明白,还可以打开两个网卡状态对话框,重复2可以看到报文从哪个网卡出去,对应网卡发送和接受报文数会在你Ping的过程不断变化;
5、ping一个包用抓包工具抓出来看看也可以;
6、最简单的方法就是让对方ping一下你的两个IP地址,哪个能ping通就用哪个。
#4
说得很对,问题是要编程实现。
不知道有那个API可以获取系统路由的。
不知道有那个API可以获取系统路由的。
#5
那就解析 “router print”的结果
#6
查了一下MSDN,这个是获得路由表的API
GetIpForwardTable
我没用过,去查一下吧
如果嫌麻烦可以用WINEXEC直接调用外部程序返回结果
GetIpForwardTable
我没用过,去查一下吧
如果嫌麻烦可以用WINEXEC直接调用外部程序返回结果
#7
关注……
#1
对方的目的IP地址和路由决定着你的数据从哪个网卡出去,路由可以手动配置也就是说你可以指定从哪个网卡出去。对于外部的一个主机A你的问题只有两个网卡都可达A时才有意义,这种情况如果不配置路由两个网卡出去都可能,随便告诉对方一个ip都可以(当然如果A不是同一局域网不能是内网IP)。
#2
是这样,假设网卡1可以到达网络A,网卡2可以到达网络B,网络A和网络B独立。但是目前不知道如何从系统中获取出网卡1能到达哪些网络?
如果知道目的地是否网卡1可达,当然可以发送网卡1的IP.
问题是,随便告诉一个IP地址就不可行了,内网地址告诉外部主机,那外部主机肯定连不通。
谢谢!
如果知道目的地是否网卡1可达,当然可以发送网卡1的IP.
问题是,随便告诉一个IP地址就不可行了,内网地址告诉外部主机,那外部主机肯定连不通。
谢谢!
#3
如果你的IP是如下的范围内,那么就是内网IP告诉外部主机没意义
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
169.254.0.0~169.254.255.255
如果不是,可以通过下面方法测试
1、打开命令行窗口,“开始”,“运行”,输入“cmd”;
2、在命令行窗口中输入 ping 对方IP地址;
3、查看路由表,输入route PRINT看看对方的IP有哪一个条路由决定,对应的Interface的IP就是你的哪个网卡绑定的IP;
4、如果你对3步骤看不明白,还可以打开两个网卡状态对话框,重复2可以看到报文从哪个网卡出去,对应网卡发送和接受报文数会在你Ping的过程不断变化;
5、ping一个包用抓包工具抓出来看看也可以;
6、最简单的方法就是让对方ping一下你的两个IP地址,哪个能ping通就用哪个。
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
169.254.0.0~169.254.255.255
如果不是,可以通过下面方法测试
1、打开命令行窗口,“开始”,“运行”,输入“cmd”;
2、在命令行窗口中输入 ping 对方IP地址;
3、查看路由表,输入route PRINT看看对方的IP有哪一个条路由决定,对应的Interface的IP就是你的哪个网卡绑定的IP;
4、如果你对3步骤看不明白,还可以打开两个网卡状态对话框,重复2可以看到报文从哪个网卡出去,对应网卡发送和接受报文数会在你Ping的过程不断变化;
5、ping一个包用抓包工具抓出来看看也可以;
6、最简单的方法就是让对方ping一下你的两个IP地址,哪个能ping通就用哪个。
#4
说得很对,问题是要编程实现。
不知道有那个API可以获取系统路由的。
不知道有那个API可以获取系统路由的。
#5
那就解析 “router print”的结果
#6
查了一下MSDN,这个是获得路由表的API
GetIpForwardTable
我没用过,去查一下吧
如果嫌麻烦可以用WINEXEC直接调用外部程序返回结果
GetIpForwardTable
我没用过,去查一下吧
如果嫌麻烦可以用WINEXEC直接调用外部程序返回结果
#7
关注……