gethostname(获取主机名)、gethostbyname(由主机名获取IP地址)
int gethostname(char *name, size_t len);
获取本地主机名存入name[len],成功返回0,失败返回-1;
struct hostent * gethostbyname(const char * hostname); //返回对应于给定主机名的包含主机名字和地址信息的hostent结构的指针
struct hostent
{
char *h_name; //所查询主机规范名
char **h_aliases; //
int h_addrtype;
int h_length;
char **h_addr_list; //本机Ip地址列表, 指针的指针存放所有的IP
};
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<signal.h>
#include<netdb.h>
#define ERR_EXIT(m)\
do\
{\
perror(m);\
exit(EXIT_FAILURE);\
}while(0)
//获取本机IP。
int getlocalip(char * ip,char *host)
{
struct hostent *hp;
if((hp=gethostbyname(host))==NULL)
return -1;
strcpy(ip,inet_ntoa(*(struct in_addr*)hp->h_addr_list[0])); //还有一个宏 #define hp->h_addr hp->h_addr_list[0]
return 0;
}
int main()
{
char host[100]={0};
if(gethostname(host,sizeof(host))<0)
ERR_EXIT("gethostname error");//错误返回-1
printf("hostname=%s\n",host);
struct hostent *hp;
if((hp=gethostbyname(host))==NULL)
ERR_EXIT("gethostbyname error");
int i=0;//hp->h_addr_list[i]是一个char* ,实际上是一个(struct in_addr)结构指针
while(hp->h_addr_list[i]!=NULL)
{
printf("%s\n",inet_ntoa(*(struct in_addr*)hp->h_addr_list[i]));//获取本地主机IP地址
i++;//list第一个指向本地IP char* inet_ntoa(struct in_addr in);(转换成点分十进制)
}
char ip[16]={0};
getlocalip(ip,host);//list中第一个指向本地IP,实现一个获取本机默认ip的程序。
printf("local ip=%s\n",ip);
return 0;
}
gethostname(获取主机名)、gethostbyname(由主机名获取IP地址)的更多相关文章
- gethostbyname() -- 用域名或主机名获取IP地址
#include <netdb.h> #include <sys/socket.h> struct hostent *gethostbyname(const char * ...
- (转)gethostbyname() -- 用域名或主机名获取IP地址
struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名,例如"www.google.cn"等等.传出值, ...
- java 获取局域网中的全部主机名和IP地址
DOS命令 命令 意义 net view 获取局域网中的全部主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的全部IP地址和物理地址 ping -a ...
- Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析(1-4)
Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配 ...
- Solaris 10主机名和IP地址步骤
1.修改主机名: hostname newname vi /etc/hosts vi /etc/hostname.e1000g0 vi /etc/nodename init 6 #重启 --confi ...
- 二十二、utl_inaddr(用于取得局域网或Internet环境中的主机名和IP地址)
1.概述 作用:用于取得局域网或Internet环境中的主机名和IP地址. 2.包的组成 1).get_host_name作用:用于取得指定IP地址所对应的主机名语法:utl_inaddr.get_h ...
- Asp.net MVC获取访问系统的客户端计算机的主机名和IP地址
string HostName = string.Empty; string ip = string.Empty; string ipv4 = String.Empty; if (!string.Is ...
- python获取设备主机名和IP地址
import socket def print_machine_info(): host_name = socket.gethostname() ip_address = socket.gethost ...
- Linux CentOS7.0 (02)修改主机名和ip地址
一.主机名修改 1.查看命令 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty). "静态"主机名也称为内核主机名 ...
随机推荐
- Flask实现群聊
后端 from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from ge ...
- 习题3-5 谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)
#include<stdio.h> #include<string.h> char s[5][5]; int main() { while(gets(s[0])) { int ...
- Elasticsearch修改字段类型 (_reindex)
1.设置索引t2为想要的数据类型 2.将t1 reindex到t2 3.数据reindex完成删除t1 4.设置索引t1为想要的数据类型 5.将t2 reindex到t1 如果 _reindex 超时 ...
- docker系统化学习图文教程
1.背景 在实际开发中我们经常遇到这样的情况: 1.开发的时候测试好的程序已发布到线上就出问题: 2.线上的集群环境需要扩容时非常麻烦,比如说要装jdk.mysql.redis等,如果扩容100台服务 ...
- sql server 2008 r2 直接下载地址,可用迅雷下载
sqlserver 2008 r2 直接下载地址,可用迅雷下载 下载sqlserver 2008 r2 ,微软用了一个下载器,经过从下载器上,将他的地址全部用键盘敲了下来.最终的简体中文版地址如下: ...
- Python之for循环和列表
for循环: 有限循环 基本语法: for 变量 in 可迭代对象: 循环体 也可使用break,continue,for else list列表初识: 列表可放任意数据类型:[int,str,boo ...
- .net core迁移实践:项目文件csproj的转换
随着net core的不断更新和生产可用,越来越多的人把现有的应用迁移和部署到net core平台.本文将分享迁移过程中的一个环节,给大家做一下参考. 背景说明 先来介绍一下什么是SDK样式的文件结构 ...
- python图片验证码识别最新模块muggle_ocr
一.官方文档 https://pypi.org/project/muggle-ocr/ 二模块安装 pip install muggle-ocr # 因模块过新,阿里/清华等第三方源可能尚未更新镜像, ...
- 由反转链表想到python链式交换变量
这两天在刷题,看到链表的反转,在翻解体思路时看到有位同学写出循环中一句搞定三个变量的交换时觉得挺6的,一般用的时候都是两个变量交换(a,b=b,a),这种三个变量的交换还真不敢随便用,而且这三个变量都 ...
- [bug]录
后端请求地址找不到,Tomcat服务器无响应 报404错误 查看资料和视频,用了2天时间(实际不到2天),还没有解决,我在书上找了描述,也问了别人,路径改成图上所说,还是未解决,找资源找到不广泛,没找 ...