如何用C语言编程得到本地主机得IP和主机名?

2024-12-23 01:20:26
推荐回答(2个)
回答1:

  1. c语言本身是不提供的。

  2. 在windows下使用系统命令或windows.h

  3. //列子

  4. #include "stdio.h" 
    #include "conio.h" 
    main() 

    int i,j; 
    char ip[20]; 
    char temp[100]; 
    char ch='\0'; 
    FILE *fp; 
    system("ipconfig >d:\\myip.txt"); 
    if ((fp=fopen("d:\\myip.txt","r"))==NULL) 

    printf("the file can not open:\nPress any key to exit:"); 
    getch(); 
    exit(1); 

    for (i=0;i<7;i++) 
    {fgets(temp,80,fp); /*跳过一些行*/ 
    /*printf("%s\n",temp); */} 
    fgets(temp,80,fp); 
    i=0;j=0; 
    while (temp[i++]!=':') 

    while (temp[i]!='\n') 
    ip[j++]=temp[i++]; 
    ip[j]=0; 
    printf("IP=%s\n",ip); 
    fclose(fp); 
    system("del d:\\myip.txt"); 

    getch(); 
    }
  5. 在Linux下
  6. #include ;  
    #include ;  
    #include ;  
    #include ;  
    #include ;  
    #include ;  
    #include ;  
    #include ;  
    #include ;  
          
    #define ETH_NAME        "eth0"  
          
    int main()  
    {  
            int sock;  
            struct sockaddr_in sin;  
            struct ifreq ifr;  
                  
            sock = socket(AF_INET, SOCK_DGRAM, 0);  
            if (sock == -1)  
            {  
                    perror("socket");  
                    return -1;                  
            }  
                  
            strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);  
            ifr.ifr_name[IFNAMSIZ - 1] = 0;  
                  
            if (ioctl(sock, SIOCGIFADDR, &ifr) < 0)  
            {  
                    perror("ioctl");  
                    return -1;  
            }  
          
            memcpy(&sin, &ifr.ifr_addr, sizeof(sin));  
            fprintf(stdout, "eth0: %s\n", inet_ntoa(sin.sin_addr));  
                  
            return 0;  
    }

回答2:

#include

gethostname,
gethostbyname,