- 浏览: 2036408 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
gethostbyname() -- 用域名或主机名获取IP地址
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
struct hostent *gethostbyname(const char *name);
这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。传出值,是一个hostent的结构。如果函数调用失败,将返回NULL。
struct hostent
{
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
#define h_addr h_addr_list[0]
};
hostent->h_name
表示的是主机的规范名。例如www.google.com的规范名其实是www.l.google.com。
hostent->h_aliases
表示的是主机的别名.www.google.com就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。
hostent->h_addrtype
表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是pv6(AF_INET6)
hostent->h_length
表示的是主机ip地址的长度
hostent->h_addr_lisst
表示的是主机的ip地址,注意,这个是以网络字节序存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话,需要调用inet_ntop()。
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) :
这个函数,是将类型为af的网络地址结构src,转换成主机序的字符串形式,存放在长度为cnt的字符串中。返回指向dst的一个指针。如果函数调用错误,返回值是NULL。
#include <netdb.h>
#include <sys/socket.h>
#include <stdio.h>
int main(int argc, char **argv)
{
char *ptr, **pptr;
struct hostent *hptr;
char str[32];
ptr = argv[1];
if((hptr = gethostbyname(ptr)) == NULL)
{
printf(" gethostbyname error for host:%s\n", ptr);
return 0;
}
printf("official hostname:%s\n",hptr->h_name);
for(pptr = hptr->h_aliases; *pptr != NULL; pptr++)
printf(" alias:%s\n",*pptr);
switch(hptr->h_addrtype)
{
case AF_INET:
case AF_INET6:
pptr=hptr->h_addr_list;
for(; *pptr!=NULL; pptr++)
printf(" address:%s\n",
inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
printf(" first address: %s\n",
inet_ntop(hptr->h_addrtype, hptr->h_addr, str, sizeof(str)));
break;
default:
printf("unknown address type\n");
break;
}
return 0;
}
编译运行
-----------------------------
# gcc test.c
# ./a.out www.baidu.com
official hostname:www.a.shifen.com
alias:www.baidu.com
address:121.14.88.11
address:121.14.89.11
first address: 121.14.88.11
发表评论
-
Berkeley DB 使用经验总结
2012-08-27 14:41 3086作者:陈磊 NoSQL是现在互联网Web2.0时代备受 ... -
嵌入式数据库系统Berkeley DB
2012-08-27 14:37 1533前言 UNIX/LINUX平台下的数据库种类非常多 ... -
C语言中标准输入流、标准输出流、标准错误输出流
2011-06-13 14:32 9293C语言中标准输入流、标准输出流、标准错误输出流 在 ... -
Rsync 实现原理
2011-05-12 20:06 8319Rsync 实现原理 前言 关于rsync的原始文档 ... -
c++简单的虚函数测试
2011-04-27 14:25 1020#include <iostream> u ... -
C++文件行查找
2011-04-26 14:10 1408#include <iostream> # ... -
c++偏特化简单示例
2011-04-13 11:17 2156c++偏特化 // temp1.c ... -
GDB调试精粹及使用实例
2011-03-16 14:06 1141GDB调试精粹及使用实例 一:列文件清单 1. ... -
简单的ini文件解析
2011-02-12 16:36 1623int GetKeyVal(const string s ... -
scanf族函数高级用法
2011-01-25 16:00 2562如何解释 fscanf(fd,&quo ... -
使用scons替代makefile(1)
2011-01-25 11:58 3733早在多年前我刚开始接触linux下的C程序时,经常被makef ... -
使用scons替代makefile(2)
2011-01-25 11:57 3584本篇文章接着上一篇进一步介绍scons的使用方法,主要介绍静态 ... -
使用scons替代makefile(3)
2011-01-25 11:55 4821在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序 ... -
C 支持动态添加测试数据的测试代码
2011-01-13 17:22 1120/下面的定义为了支持可扩增。 //当需要增加一个新的测试用列 ... -
Linux下Makefile的automake生成
2010-12-28 16:55 1102******************helloworld.c* ... -
SCons笔记(详细版)
2010-12-23 16:11 105411. 基本使用 SConstruct文件就功能而言相当于Ma ... -
scons 学习
2010-12-23 11:14 2181scons 学习 作者:Sam(甄峰) sam_code@h ... -
scons随笔
2010-12-22 20:20 4707scons随笔 Scons是新一代的软件构件工具,或者说ma ... -
Scons在linux下的安装和使用
2010-12-21 11:59 3286因为正在用的一个开源软件需要的Developm ... -
排列组合的实现
2010-12-20 12:41 1063简单算法: 从前往后(或者从后往前)每次交换一个位置。当存在 ...
相关推荐
在IT行业中,网络编程是不可或缺的一部分,而获取主机名和IP地址是网络通信的基础操作。在许多应用场景中,如服务器管理、网络诊断、分布式系统设计等,都需要知道一个设备在网络中的标识,即主机名和IP地址。下面...
在PowerBuilder中获取本地IP地址或主机名是一个常见的需求,特别是在开发网络应用程序时。PowerBuilder是一种流行的第四代编程语言(4GL),它提供了一个集成的开发环境(IDE)用于创建数据库驱动的应用程序。在这个...
在这个场景中,"pb9 获取主机名和主机ip地址" 指的可能是一个用PowerBuilder 9(pb9)编写的程序,该程序能够在Windows 7操作系统下运行,用于查询和显示本地主机的名称以及其关联的IP地址。 首先,我们来了解什么...
这个函数会查询DNS(域名系统)服务器,以获取主机名的IP地址信息。 2. `gethostbyaddr`:相反,当已知一个IP地址,但想要找出它对应的主机名时,就用到`gethostbyaddr`。它通过DNS反向查询,将IP地址转换成主机名...
- 使用`gethostbyname`函数:这是源自Berkeley套接字API的一个函数,可以获取指定主机名的IP地址。不过,由于这个函数已经被视为过时,我们更推荐使用`getaddrinfo`函数。 - `getaddrinfo`函数:这是一个更现代、...
本文将深入探讨如何在编程环境中获取本机的主机名和IP地址,这对于任何IT专业人士或初学者来说都是非常重要的知识。 首先,我们需要理解主机名和IP地址的基本含义。主机名是一个标识符,用于唯一地识别网络中的设备...
在这个场景下,"VC 获取主机名和IP地址.rar" 提供了一段使用Visual C++(VC)编写的源码,用于实现获取主机名和IP地址的功能。这对于网络通信、系统监控以及故障排查等任务来说是必不可少的。 首先,我们需要理解...
`GetHostByName`函数是Winsock API的一部分,用于根据给定的主机名(域名)获取其IP地址。该函数的主要参数包括: - `char *name`: 主机名或域名字符串。 - 返回值:指向`hostent`结构体的指针,该结构体包含了主机...
`GetComputerName`函数用于获取主机名,而`GetHostByName`或`getaddrinfo`函数则用于获取IP地址。 - `GetComputerName`: 这个函数返回当前计算机的NetBIOS名称,可以使用`GetComputerNameEx`函数获取更详细的主机...
3. **解析IP地址**: 获取主机名后,我们可以使用`gethostbyname`函数将主机名转换为IP地址。这个函数接收主机名作为参数,并返回一个`hostent`结构体,其中包含了IP地址和其他相关信息。如果你需要处理IPv6,可以...
在IT行业中,获取主机名和IP地址是网络编程和系统管理中的基础操作。这个"获得主机名和IP 实用小程序"可能是一个工具或脚本,它可以帮助用户快速地查询和识别计算机在网络上的身份信息。接下来,我们将深入探讨相关...
`php gethostbyname`函数是PHP中用于将主机名(域名)转换为其对应的IP地址的内置函数。在互联网通信中,计算机通常通过IP地址来识别和通信,但人们更容易记住有意义的域名,如"www.example.com"。`gethostbyname`...
`gethostbyname`是C标准库中的一个函数,它被用于DNS查询,即根据给定的主机名(域名)返回其IP地址。在Windows环境下,为了使用这个函数,我们需要包含`winsock2.h`头文件,并链接到`ws2_32.lib`库。此外,在调用...
以下是一个简单的例子,通过Windows的WSAData初始化套接字环境,然后使用gethostbyname函数获取本地主机名的IP地址: ```delphi uses Winsock; var WSAData: TWSAData; HostEnt: PHostEnt; IPAddress: PChar; ...
DNS是互联网的一项服务,它将易于记忆的主机名转换为对应的IP地址。当我们在浏览器中输入一个网址时,实际上是在请求DNS服务器将这个域名解析为IP地址。同样,我们也可以利用DNS系统来获取某个机器名的IP地址。 在...
例如,在Python中,我们可以使用`socket`库来获取本地主机名和IP,使用`socket.gethostbyname()`来解析域名,使用`socket.socket().connect()`建立连接并获取远程服务的端口。 了解如何获取主机域名、IP和Port,...
在编程领域,获取IP地址是一项基础任务,尤其对于网络编程来说更是不可或缺的一部分。在这个"一个简单的获取IP地址的程序"的课堂作业中,初学者将会接触到如何通过代码来获取计算机的IP信息。以下是对这个主题的详细...
本文将深入探讨`gethostbyname`函数的工作原理、功能以及如何使用它来获取IP地址列表。 `gethostbyname`是一个在许多操作系统和编程语言中广泛使用的函数,主要用于从域名(例如,www.example.com)获取IP地址。这...
其中,获取本机IP地址通常使用`GetAdaptersInfo`或`GetHostByName`函数,而获取主机名则可以使用`GetComputerName`函数。 1. **获取本机IP地址**: - `GetAdaptersInfo`函数:这个函数返回一个包含所有网络适配器...
例如,`ping`命令(基于ICMP协议)可以用来检查网络连接并获取远程主机的IP地址,而`nslookup`或`dig`(基于DNS协议)则可查询域名对应的IP地址。 在“实例104-获取本地计算机的名称和IP地址”中,很可能是提供了一...