vc 如何获取本地网关

 我来答
匿名用户

2014-01-26
展开全部
大概的步骤如下 1.获得子网掩码和gateway IP地址 2.AND操作获得局域网IP启示段,OR操作获得最大范围 3.向这个区域的每个IP,发送ARP(地址解析协议),获得的计算机会返回给你消息 4.至于如何发送ARP,window下面提供了SendARP interface,也可以使用第3方 driver 根据这个流程,对应google搜集资料,可以实现 --------------------------------------------------------------- 先用 DhcpEnumSubnets 枚举子网, 会有很多。 wchar_t wcIP[255]; //把dhcp主机的IP放在wcIP中 DHCP_RESUME_HANDLE hResumeHandle = 0; DWORD PrefMax = 255;//预计的最大租约个数 DWORD dwRead; DWORD dwTotal; LPDHCP_IP_ARRAY IPArray = NULL; DWORD dwRet ; dwRet = DhcpEnumSubnets(wcIP, &hResumeHandle, PrefMax, &IPArray , &dwRead, &dwTotal); 然后在子网的基础上, 用DhcpEnumSubnetClients枚举租约 for (DWORD i = 0; i < dwRead; i ++) { DWORD ip = IPArray->Elements[i];//子网地址 //str.Format("(%d) IP = %s\n", i, IP2Str(htonl(ip))); //AfxMessageBox(str); DHCP_RESUME_HANDLE hRH = 0; LPDHCP_CLIENT_INFO_ARRAY clientArray = NULL; DWORD PrefMaxClient = 65535; DWORD ClientsRead, ClientsTotal; DhcpEnumSubnetClients(wcIP, ip, &hRH, PrefMaxClient, &clientArray,&ClientsRead, &ClientsTotal); for (DWORD j = 0; j < ClientsRead; j ++) { //输出客户地址 DHCP_IP_ADDRESS clientIP = clientArray->Clients[j]->ClientIpAddress; //这个是主机机名, 宽字串的:clientArray->Clients[j]->ClientName //MAC地址:一般是6个 clientArray->Clients[j]->ClientHardwareAddress->Data } } } wangnan3 http://zhidao.baidu.com/question/43836243.html 2 怎样取消预编译头文件?~~~~~ 答案: 这里没装VC6``忘了那几个名字 你去project-setting,然后在第一个(或第二个)tab页,会看到左边有一个树,你选择对应要取消预编译头的文件,然后在右边,会看到一个combo box,选择process.. header``然后会有4个单选框,你选择第一个no...什么的就可以了 --------------------------------------------------------------- vc++IDE--->Project--->Setting--->c/c++--->Category--->PreCompiled Headers--->Not Use Precompiled Headers专家提供:回答者: 张琎 - 软件专家 1-16 10:02我来评论>>评价已经被关闭 目前有 0 个人评价 好50% (0) 不好50% (0) 相关内容 路由器安装设置向导 局域网某几台机子上不了网,从DHCP获取IP失败 明明可以从DHCP获取IP,为什么显示"DHCP Enabled........ 本地连接通过DHCP获取IP(192.168.200.61),无法登... 上不了网,本地连接提示DHCP获取IP地址失败。是什么... 查看同主题问题:分配 ip dhcp 其他回答 共 1 条//将CString 型IP地址在IPAddressCtrl中显示 CString strIP; char *name = strIP.GetBuffer(100); char *ip; PHOSTENT hostinfo; TRACE1("%d\n", sizeof(name)); if( gethostname (name , 100) == 0) { if((hostinfo = gethostbyname(name)) != NULL) { //这些就是获得IP的函数 ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); strIP.ReleaseBuffer(); strIP = ip; } } DWORD dwIP; dwIP = inet_addr(strIP); unsigned char *pIP = (unsigned char*)&dwIP;
Storm代理
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效... 点击进入详情页
本回答由Storm代理提供
我擦呢吗shine
2015-11-12 · 知道合伙人体育行家
我擦呢吗shine
知道合伙人体育行家
采纳数:41 获赞数:7497
河南工业大学在校大学生

向TA提问 私信TA
展开全部

  获取本地网关实现过程:

  1. WSAStartup()。Windows Sockets Asynchronous的启动命令,Windows下的网络编程必须先启用本命令,不然,后续的操作都会报错:10093:WSAStartup() 调用未成功执行过。

  2. gethostname()获得本机名。

  3. gethostbyname()获得本机网络信息,存储到struct hostent *指针中,返回给调用者。

  4. 从struct hostent结构体信息中,获取ip地址,转换成字符串输出。

  参考代码 :

  #include "winsock2.h"
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
WSADATA wsaData;
char name[155];
char *ip;
PHOSTENT hostinfo;
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 )
{
if( gethostname ( name, sizeof(name)) == 0)
{
printf("hostname=%s\n", name );
if((hostinfo = gethostbyname(name)) != NULL)
{
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); //得到地址字符串
printf("local host ip: %s\n",ip);
}
}
WSACleanup( );
}
return 0;
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式