多网卡如何取得正在使用的本机IP?

wqpaul 2007-01-17 11:21:31
内网的一台机器有2张网卡,分处在不同的网段(192.168.0.*,172.168.*.*),分别通过NAT与公网的服务器相连。
请问如何得到到底是那个网卡或者那个IP地址与服务器相连接?

最好不要低于Socket的级别。
谢谢!
...全文
739 点赞 收藏 13
写回复
13 条回复
xfyxq 2012年01月04日
C#报语法错误
回复 点赞
cnlzx 2007年04月28日
bind和listen不是一回事,你是不是以为监听端口才bind?
connect前没bind的那么用的本地port是系统随机给的,你试下bind在一个端口之后connect 一个IP,再netstat看看本地用什么端口连出去的
回复 点赞
wqpaul 2007年02月12日
可是bind是服务器端的啊!
回复 点赞
alexmayer 2007年01月19日
学习
回复 点赞
cnlzx 2007年01月19日
在与服务器相连时也就是connect前不是要bind吗?你bind在哪个网卡上进行的connect啊?
回复 点赞
EvilLin 2007年01月18日
char localName[ 80 ] = {0};
int ret = 0;
if ( gethostname( localName, sizeof( localName ) ) == SOCKET_ERROR )
{
return false;
}
struct hostent *phe = gethostbyname( localName );
int count = 0;
while(phe->h_addr_list[count]!=0)
count++;
.......
回复 点赞
macnab 2007年01月18日
HOSTENT* pHost;

pHost=gethostbyname(strHostName); //用主机名来得到IP地址

他会得到一个指针数组,用来表示所有网卡IP.
回复 点赞
wj19781215 2007年01月18日
用api getsockname(pContext^.sConnect,@LocalAddr,nAddrLen)
回复 点赞
chehw 2007年01月17日
你需要明确描述一下工作环境。
回复 点赞
wqpaul 2007年01月17日
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.0.1 172.16.0.71 30
0.0.0.0 0.0.0.0 192.168.100.100 192.168.100.103 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
172.16.0.0 255.255.0.0 172.16.0.71 172.16.0.71 30
172.16.0.71 255.255.255.255 127.0.0.1 127.0.0.1 30
172.16.255.255 255.255.255.255 172.16.0.71 172.16.0.71 30
192.168.100.0 255.255.255.0 192.168.100.103 192.168.100.103 20
192.168.100.103 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.100.255 255.255.255.255 192.168.100.103 192.168.100.103 20
192.168.122.0 255.255.255.0 192.168.122.1 192.168.122.1 20
192.168.122.1 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.122.255 255.255.255.255 192.168.122.1 192.168.122.1 20
192.168.140.0 255.255.255.0 192.168.140.1 192.168.140.1 20
192.168.140.1 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.140.255 255.255.255.255 192.168.140.1 192.168.140.1 20
224.0.0.0 240.0.0.0 172.16.0.71 172.16.0.71 30
224.0.0.0 240.0.0.0 192.168.100.103 192.168.100.103 20
224.0.0.0 240.0.0.0 192.168.122.1 192.168.122.1 20
224.0.0.0 240.0.0.0 192.168.140.1 192.168.140.1 20
255.255.255.255 255.255.255.255 172.16.0.71 172.16.0.71 1
255.255.255.255 255.255.255.255 192.168.100.103 192.168.100.103 1
255.255.255.255 255.255.255.255 192.168.122.1 192.168.122.1 1
255.255.255.255 255.255.255.255 192.168.140.1 192.168.140.1 1
Default Gateway: 192.168.100.100
===========================================================================
Persistent Routes:
None
回复 点赞
chehw 2007年01月17日
读注册表网络适配器的信息,
有网关的网卡连的是公网服务器,没网关的连的是内部。
回复 点赞
wqpaul 2007年01月17日
我可以读取到地址信息172.16.0.71和192.168.100.103 并且从路由表 可以知道 是从 192.168.100.103请求出去的。当时写程序如何知道是那张网卡出去的呢?

0.0.0.0 0.0.0.0 172.16.0.1 172.16.0.71 30
0.0.0.0 0.0.0.0 192.168.100.100 192.168.100.103 20

回复 点赞
zdleek 2007年01月17日
通常来说,比较通用而且简单的办法是从配置文件读取IP,然后绑定到该IP
回复 点赞
发动态
发帖子
网络编程
创建于2007-09-28

7880

社区成员

6.4w+

社区内容

VC/MFC 网络编程
社区公告
暂无公告