• linux下获取主机信息


    程序源于linux程序设计这本书,个人利用这本书学习,本文作为一个知识点来学习.

    这里首先介绍几个结构体:

    1
    2
    3
    4
    5
    6
    7
    struct hostent{
    char* h_name;//主机名称
    char* h_aliases;//主机别名
    short h_addrtype;//主机地址类型
    short h_length;//主机地址长度
    char **h_addr_list;//主机地址列表
    }
     

    其中,主机地址类型h_addrtype为AF_INET;地址列表为字符串,长度不定.

    1
    2
    3
    4
    5
    6
    struct servent {
        char  *s_name;       /* 服务名 */
        char **s_aliases;    /* 服务别名列表 */
        int    s_port;       /* 端口号 */
        char  *s_proto;      /* 使用的协议 */
    };
     

    下面来点干活,直接插入代码:

    1 #include<unistd.h>
    2 #include<netinet/in.h>
    3 #include<arpa/inet.h>
    4 #include<netdb.h>
    5 #include<stdio.h>
    6
    7 int main(int argc,char *argv[]){
    8     char *host, **names,**addrs;
    9     struct hostent *hostinfo;
    10
    11     if(argc==1){//若没有主机名陈,则获取本机信息
    12         char myname[256];
    13         gethostname(myname,255);
    14         host = myname;
    15     }
    16     else
    17         host = argv[1];
    18
    19     hostinfo = gethostbyname(host);//获取主机信息
    20     if(!hostinfo){
    21         fprintf(stderr,"cannot get info host:%s ",host);                  
    22         exit(1);
    23     }
    24
    25     printf("resluts for host %s: ",host);
    26     printf("Name:%s ",hostinfo -> h_name);//主机名
    27     printf("Aliases:");
    28     names = hostinfo -> h_aliases; //主机别名
    29     while(*names){//输出全部主机别名
    30         printf(" %s",*names);
    31         names++;
    32     }
    33
    34     printf(" ");
    35
    36     if(hostinfo -> h_addrtype !=AF_INET){//主机地址类型判断
    37         fprintf(stderr,"not an IP host! ");
    38         exit(1);
    39     }
    40
    41     addrs = hostinfo -> h_addr_list;
    42     while(*addrs){//转换主机地址格式
    43         printf(" %s",inet_ntoa(*(struct in_addr *)*addrs));
    44         addrs++;
    45     }
    46     printf(" ");
    47     exit(0);
    48 }

    程序运行结果: linux下相册不好传图片,这里直接传文字了。

    ./getname resluts for host farbeyond-Aspire-4741:

    Name:farbeyond-Aspire-4741

    Aliases: 127.0.1.1

    ./getname baidu.com resluts for host baidu.com:

    Name:baidu.com

    Aliases:

    220.181.57.217 220.181.57.216 123.125.114.144       

          上面这三个ip地址,大家均可以用于访问百度。而谷歌同时有十几个ip在使用,依据公司规模不同而不同。

    这是客户端来查询服务器端,当然服务器端也可以查看访问者的来源ip,这就提供了收集用户信息的手段。

  • 相关阅读:
    Redis
    Zookeeper的安装配置及基本开发
    【Unity Shader】新书封面 — Low Polygon风格的渲染
    Hive基本原理及环境搭建
    Hadoop开发环境搭建
    java常用排序算法
    企业人事管理系统项目拾金
    Linux27:分区、格式化与修复
    Linux26:查询磁盘和监控系统资源
    Linux25:文件系统特点与XFS文件系统
  • 原文地址:https://www.cnblogs.com/farbeyond/p/5196832.html
Copyright © 2020-2023  润新知