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

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

最好不要低于Socket的级别。
谢谢!
...全文
986 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xfyxq 2012-01-04
  • 打赏
  • 举报
回复
C#报语法错误
cnlzx 2007-04-28
  • 打赏
  • 举报
回复 1
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

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧