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\n",host);                  

22         exit(1);

23     }

24

25     printf("resluts for host %s:\n",host);

26     printf("Name:%s\n",hostinfo -> h_name);//主机名

27     printf("Aliases:");

28     names = hostinfo -> h_aliases; //主机别名

29     while(*names){//输出全部主机别名

30         printf(" %s",*names);

31         names++;

32     }

33

34     printf("\n");

35

36     if(hostinfo -> h_addrtype !=AF_INET){//主机地址类型判断

37         fprintf(stderr,"not an IP host!\n");

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("\n");

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,这就提供了收集用户信息的手段。

时间: 2024-10-19 21:31:38

linux下获取主机信息的相关文章

Linux下获取网络接口信息

Linux下的网络接口信息在shell下可以很方便地使用ifconfig查看.同样,使用C/C++也可以很方便地获取接口信息. netdevice是一个低级别的访问Linux网络设备的方法.此方法通过ioctl来获取网络接口的相关信息. 这里需要借助<net/if.h>头文件中定义的ifreq结构体.此结构体包含了网络接口的名称.IP地址.广播地址.网络地址. 掩码等相关信息.在获取上述相关信息的时候需要指明网络接口的名称. 1 struct ifreq { 2 char ifr_name[I

使用dmidecode在Linux下获取硬件信息

dmidecode命令可以让你在Linux系统下获取有关硬件方面的信息.dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示.由于DMI信息可以人为修改,因此里面的信息不一定是系统准确的信息.dmidecode遵循SMBIOS/DMI标准,其输出的信息包括BIOS.系统.主板.处理器.内存.缓存等等. DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行.SM

如何在windows下和linux下获取文件(如exe文件)的详细信息和属性

程序员都很懒,你懂的! 最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息.最后由我用java实现linux上exe文件的版本号读取功能.下面是详细代码: package com.herman.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.I

Linux下获取arm的交叉编译工具链

转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gneabihf-gcc等. 前言 这里有一个专门的说法: “arm-linux-gnueabihf-gcc是由 Linaro 公司基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括裸机程序.u-boot.Linux kernel.filesystem和App应用程序.使

Linux下获取代码文件名、代码所在行数及日期时间的C程序实现

一.概述 在实际的软件开发项目中,为了方便排查程序问题,要求在日志文件中输出日志信息所在的程序文件名及日志代码所在的行数.此外,某些软件还会要求将程序启动时的日期时间输出到日志文件中,方便跟踪软件运行状况. 本文介绍了Linux下获取代码文件名.代码行数及日期时间的C代码实现. 二.几个标准预定义宏简介 在C语言中,使用几个标准预定义宏,便可轻松实现获取代码文件名.代码行数及日期时间的功能. 这几个宏的定义如下(注意:前后都是两条连续的下划线): __FILE__:在源文件中插入当前源文件名.

PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息

最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取主机信息 这种方式获取的主机信息相对是比较新的(每分钟更新一次).但因为每次都需要请求接口,所以相对比较慢,如果并发查询的主机数量比较多,就会非常慢. 开源监控系统ZABBIX的官方文档提供了丰富的API.我这里http请求是用的Guzzle 6.当然你也可以用php内置的curl函数自己写一个ht

在Windows及Linux下获取毫秒级运行时间的方法

在Windows下获取毫秒级运行时间的方法 头文件:<Windows.h> 函数原型: /*获取时钟频率,保存在结构LARGE_INTEGER中***/ WINBASEAPI BOOL WINAPI QueryPerformanceFrequency( _Out_ LARGE_INTEGER * lpFrequency ); /*获取从某个时间点开始的时钟周期数,保存在结构LARGE_INTEGER中**/ WINBASEAPI BOOL WINAPI QueryPerformanceFreq

Linux下获取和设置IP

在Linux下获取关于IP和网关的操作:重点是对struct ifreq 的操作. 那么进入目录/usr/include/net/if.h下看查找struct ifreq结构体. /* Interface request structure used for socket ioctl's. All interface ioctl's must have parameter definitions which begin with ifr_name. The remainder may be in

4.Linux下获取帮助

4.Linux下获取帮助 ·没必要记住所有东西,Linux提供了详细的帮助工具及文档, ·whatis,查看帮助的第一行, ·help:使用-h或者--help获取,如 ls --help或者help ls, ·man:(manual)Linux最常用的帮助命令,将要获取帮助的命令作为参数运行man命令,如man ls, ·man类型共分9种,如man 1 ls,man 5 ls, ·man -k 关键字,可以用来查询包含该关键字的文档,如man -k passwd, ·info:与man类似,