`
xusaomaiss
  • 浏览: 615589 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

VC中通过域名或主机获取IP(转)

阅读更多

#include <stdafx.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <windows.h>


#pragma comment(lib, "ws2_32.lib")


int main(int argc, char  **argv)

{    
    //-----------------------------------------
    
    // 定义初始化变量
    
    WSADATA wsaData;    
    int iResult;
    DWORD dwError;
    
    int i = 0;    
    struct hostent *remoteHost;    
    char *host_name;    
    struct in_addr addr;    
    char **pAlias;
    
    // 校验参数
    
    if (argc != 2) {        
        printf("usage: %s ipv4address\n", argv[0]);        
        printf(" or\n");        
        printf("       %s hostname\n", argv[0]);        
        printf("  to return the host\n");        
        printf("       %s 127.0.0.1\n", argv[0]);        
        printf("  to return the IP addresses for a host\n");        
        printf("       %s www.a3gs.com\n", argv[0]);        
        return 1;
    }
    
    // 初始化Winsock
    
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);    
    if (iResult != 0) {        
        printf("WSAStartup failed: %d\n", iResult);        
        return 1;        
    }

    host_name = argv[1];
    // 如果用户输入是一个字母, 则我们使用gethostbyname()函数
    // 假如输入是数字,则判断为IP地址
    if (isalpha(host_name[0])) {    
        printf("Calling gethostbyname with %s\n", host_name);        
        remoteHost = gethostbyname(host_name);    
    } else {        
        printf("使用%s调用gethostbyaddr函数%s\n", host_name);    
        addr.s_addr = inet_addr(host_name);    
        if (addr.s_addr == INADDR_NONE) {        
            printf("请输入有效IPv4地址\n");    
            return 1;    
        } else    
        {    
            remoteHost = gethostbyaddr((char *) &addr, 4, AF_INET);    
        }
    }
    if (remoteHost == NULL) {    
        dwError = WSAGetLastError();    
        if (dwError != 0) {    
            if (dwError == WSAHOST_NOT_FOUND) {        
                printf("无法定位到主机\n");
                return 1;
            }else if (dwError == WSANO_DATA) {        
                printf("无路由记录\n");    
                return 1;    
            } else {
                printf("函数调用出错,代码: %ld\n", dwError);
                return 1;    
            }
        }
    } else {
        printf("函数返回:\n");
        printf("\t主机名称: %s\n", remoteHost->h_name);
        for (pAlias = remoteHost->h_aliases; *pAlias != 0; pAlias++) {
            printf("\t主机别名#%d: %s\n", ++i, *pAlias);
        }
        printf("\t地址类型: ");
        switch (remoteHost->h_addrtype) {
        case AF_INET:    
            printf("AF_INET\n");
            break;
        case AF_INET6:
            printf("AF_INET6\n");
            break;
        case AF_NETBIOS:
            printf("AF_NETBIOS\n");
            break;
        default:
            printf(" %d\n", remoteHost->h_addrtype);
            break;
        }
        printf("\t地址长度: %d\n", remoteHost->h_length);      
        i = 0;
        while (remoteHost->h_addr_list[i] != 0) {
            addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];
            printf("\t主机IP地址#%d: %s\n", i, inet_ntoa(addr));
        }    
    }
    return 0;
}
分享到:
评论

相关推荐

    通过IP地址获得域名和主机名

    本文将深入探讨如何在Java编程环境中通过IP地址获取对应的域名和主机名。 首先,我们需要理解DNS(Domain Name System)的作用。DNS是互联网的一项服务,它负责将域名解析为相应的IP地址,反之亦然。在Java中,我们...

    VC扫描局域网IP和主机名源代码

    本主题聚焦于“VC扫描局域网IP和主机名源代码”,这通常指的是使用Visual C++(VC)编写的程序,用于扫描本地局域网(LAN)中的IP地址和对应的主机名。下面我们将深入探讨这个话题,包括网络扫描的基本概念、VC编程...

    VC 获取MAC和IP 域名,网关和DNS设置代码.rar

    VC 获取MAC和IP的代码,同时获得域名、主机名、独立工作域、绑定的Ip地址、默认网关以及DNS等。可将本代码所演示的获取方法应用到其它的VC 开发项目中,挺基础,但属于有必要掌握的内容,测试截图如图所示。  程序...

    VC 获取主机名和IP地址.rar

    在这个场景下,"VC 获取主机名和IP地址.rar" 提供了一段使用Visual C++(VC)编写的源码,用于实现获取主机名和IP地址的功能。这对于网络通信、系统监控以及故障排查等任务来说是必不可少的。 首先,我们需要理解...

    用VC++获取主机名和IP地址

    在VC++编程环境中,获取主机名和IP地址是网络编程中的基本操作,这对于构建网络应用程序或者进行系统诊断非常有用。本文将深入探讨如何利用VC++实现这一功能,并提供相关的编程思路和技术要点。 首先,我们需要了解...

    VC++获取主机名和地址

    `GetComputerName`函数用于获取主机名,而`GetHostByName`或`getaddrinfo`函数则用于获取IP地址。 - `GetComputerName`: 这个函数返回当前计算机的NetBIOS名称,可以使用`GetComputerNameEx`函数获取更详细的主机...

    VC 6.0域名解析演示程序源代码.rar

    通过调用特定的Winsock函数,如`gethostbyname`或`getaddrinfo`,开发者可以实现域名到IP地址的转换。 1. **Winsock库的引入**:在VC 6.0项目中,首先需要包含Winsock库。这可以通过在项目设置中添加`winsock2.h`...

    VC++ 读取网卡信息,物理地址(MAC),IP等的类及应用

    可以通过`GetComputerNameEx`函数获取主机名,它允许你选择返回计算机的全名、NetBIOS名或DNS域名。例如,使用`GET_COMPUTER_NAME_FORMAT_DOMAIN`标志可以得到域名。 2. **获取网卡信息**: `GetAdaptersInfo`...

    获得本机IP和主机名

    在计算机网络中,获取本机的IP地址和主机名是常见的需求,这通常涉及到网络编程和系统调用。本文将详细讲解如何使用VC++来实现这个功能。 首先,我们需要了解IP地址和主机名的基本概念。IP地址(Internet Protocol ...

    VC 域名解析程序111111111

    3. **设置目标主机信息**:使用`gethostbyname`或`getaddrinfo`函数获取域名对应的IP地址。这两个函数都是用于域名解析的,`gethostbyname`适用于较旧的API,而`getaddrinfo`是更现代且功能更强大的选择,支持IPv6。...

    域名解析IP的小程序,基于Vc 开发.rar

    然而,根据描述,这个小程序可能只实现了最后一步,即获取IP地址(可能是通过其他方式,例如直接解析`gethostbyname`或`getaddrinfo`函数,而不是通过DNS查询)并将其保存到剪贴板,而没有涵盖完整的DNS解析流程。...

    基于VC++的IP地址获取系统

    在这个系统中,核心任务是从主机名解析出对应的IP地址,这是通过调用操作系统提供的API或者网络库实现的。 首先,我们要理解IP地址与主机名的关系。在互联网上,每个设备都有一个唯一的IP地址,它是网络层通信的...

    VC写的ip查询软件

    然后,可以使用gethostbyname或gethostbyaddr函数来解析IP地址,获取主机信息。对于DNS查询,可能需要用到send和recv函数进行数据的发送与接收。如果查询目标是WHOIS服务器,那么可能需要构建特定的查询请求报文,并...

    VC实现ipconfig指令源码

    - 关键函数包括`WSAStartup`(初始化Winsock)、`gethostbyname`(获取主机名的IP地址)、`gethostname`(获取本地主机名)和`getipnodebyname`(通过域名获取IP地址)等。 4. 获取网络接口信息: - `...

    VC6 Socket 编程 远程获取目录树

    3. **解决主机名**:通过`gethostbyname`或`getaddrinfo`函数,将远程服务器的域名或IP转换为套接字地址结构(struct sockaddr_in)。 4. **建立连接**:调用`connect`函数,将Socket与远程服务器的地址连接起来。...

    winsocket编程获得本机IP地址和计算机名称

    在IT领域,网络通信是不可或缺的一部分,而Winsock(Windows Sockets)是Windows操作系统中实现TCP/IP协议族接口的一种方式。本主题将深入探讨如何利用Winsock编程来获取本机的IP地址和计算机名称,这对于开发涉及...

    VC获取远程电脑硬盘内容并下载其文件源码

    你需要知道远程计算机的IP地址或域名以及适当的端口号。 其次,要获取远程硬盘内容,你需要实现一种文件遍历机制。这可能涉及到使用SMB(Server Message Block)协议,这是一个在Windows系统中广泛使用的网络文件...

    计算机网络 发现网络中的活动主机

    3. 设置目标主机:根据IP地址或域名解析目标主机。 4. 发送ping请求:对于ICMP,使用sendto函数发送echo请求;对于TCP/UDP,可以连接到特定端口。 5. 接收响应:等待并接收目标主机的回应,分析结果以确定主机状态。...

    CPing -ICMP VC6 封装类

    1. **创建CPing对象**:首先实例化CPing类,通常需要指定要ping的目标主机IP地址或域名。 2. **配置参数**:如果需要,可以设置ping请求的相关参数,如超时时间、数据包大小等。 3. **发起ping请求**:调用类中的...

    VC 网络相关的源代码实例.rar

     通过主机名称获得IP地址  通过IP地址获得主机名称  实现无连接的网络通信  获得计算机的DNS服务器地址  获得计算机的IP地址  获得计算机的IP协议统计信息  实现面相连接的网络通信  获得本地计算机...

Global site tag (gtag.js) - Google Analytics