zoukankan      html  css  js  c++  java
  • 域名解析【网络程序设计

    实验要求

    给出域名,调用WindowsAPI,解析域名,返回其IPV4地址。

    Code

    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdio.h>
    #include <windows.h>
    #pragma comment(lib, "ws2_32.lib")
    
    int main(int argc, char **argv)
    {
    
        //-----------------------------------------
        // Declare and initialize variables
        WSADATA wsaData;
        int iResult;
    
        DWORD dwError;
        int i = 0;
    
        struct hostent *remoteHost;
        char *host_name;
        struct in_addr addr;
    
        char **pAlias;
    
        // Validate the parameters
        if (argc != 2) {
            printf("usage: %s hostname
    ", argv[0]);
            printf("  to return the IP addresses for the host
    ");
            printf("       %s www.contoso.com
    ", argv[0]);
            printf(" or
    ");
            printf("       %s IPv4string
    ", argv[0]);
            printf("  to return an IPv4 binary address for an IPv4string
    ");
            printf("       %s 127.0.0.1
    ", argv[0]);
            return 1;
        }
        // Initialize Winsock
        iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
        if (iResult != 0) {
            printf("WSAStartup failed: %d
    ", iResult);
            return 1;
        }
    
        host_name = argv[1];
    
        printf("Calling gethostbyname with %s
    ", host_name);
        remoteHost = gethostbyname(host_name);
        
        if (remoteHost == NULL) {
            dwError = WSAGetLastError();
            if (dwError != 0) {
                if (dwError == WSAHOST_NOT_FOUND) {
                    printf("Host not found
    ");
                    return 1;
                } else if (dwError == WSANO_DATA) {
                    printf("No data record found
    ");
                    return 1;
                } else {
                    printf("Function failed with error: %ld
    ", dwError);
                    return 1;
                }
            }
        } else {
            printf("Function returned:
    ");
            printf("	Official name: %s
    ", remoteHost->h_name);
            for (pAlias = remoteHost->h_aliases; *pAlias != 0; pAlias++) {
                printf("	Alternate name #%d: %s
    ", ++i, *pAlias);
            }
            printf("	Address type: ");
            switch (remoteHost->h_addrtype) {
            case AF_INET:
                printf("AF_INET
    ");
                break;
            case AF_NETBIOS:
                printf("AF_NETBIOS
    ");
                break;
            default:
                printf(" %d
    ", remoteHost->h_addrtype);
                break;
            }
            printf("	Address length: %d
    ", remoteHost->h_length);
    
            i = 0;
            if (remoteHost->h_addrtype == AF_INET)
            {
                while (remoteHost->h_addr_list[i] != 0) {
                    addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];
                    printf("	IP Address #%d: %s
    ", i, inet_ntoa(addr));
                }
            }
            else if (remoteHost->h_addrtype == AF_NETBIOS)
            {   
                printf("NETBIOS address was returned
    ");
            }   
        }
    
        return 0;
    }
    

    程序说明

    编译gcc -fexec-charset=GBK gethostbyname.c -o gethostbyname -lws2_32
    执行

    1. 不带参数 gethostbyname
    2. 带参数 gethostbyname www.baidu.com

    实验截图

    参考资料

    1.gethostbyname API

  • 相关阅读:
    STM32L476的RTC使用问题记录
    python数据分析之:时间序列二
    python+NLTK 自然语言学习处理七:N-gram标注
    python数据分析之:时间序列一
    如何在ubuntun中安装intellij idea 2018并破解
    python+NLTK 自然语言学习处理六:分类和标注词汇一
    python数据分析之:数据聚合与分组运算
    500 Lines or Less: A Template Engine(模板引擎)
    python+NLTK 自然语言学习处理五:词典资源
    Django之博客系统:在网站中分享内容(一)
  • 原文地址:https://www.cnblogs.com/shengwang/p/9882009.html
Copyright © 2011-2022 走看看