精华内容
下载资源
问答
  • 如何通过域名获取主机ip地址 需要注意,主机不是本机,一般指服务器与客户端。主机信息主要包含ip地址和对应的域名。linux使用结构体struct hostent表示主机的信息。struct hostent各个成员的含义如下: struct ...

    如何通过域名获取主机ip地址

    需要注意,主机不是本机,一般指服务器与客户端。主机信息主要包含ip地址和对应的域名。linux使用结构体struct hostent表示主机的信息。struct hostent各个成员的含义如下:

    struct hostent
    {
        char *h_name;      //主机名,即官方域名,规范域名
        char **h_aliases;  //主机所有别名构成的字符串数组,同一IP可绑定多个域名。最后以一个字符串为NULL,用于判断数组的结束。
        int h_addrtype;    //主机IP地址的类型.要么是AF_INET(IPV4),要么是AF_INET6(IPV6).
        int h_length;      //主机IP地址长度,IPV4地址为4,IPV6地址则为16
        char **h_addr_list;//域名对应ip地址表,以网络字节序存储。最后一个数组的指针为NULL,用来判断数组的结束。即h_addr_list[n] == NULL。若要打印出这个IP,需要调用inet_ntoa()。
    };

    下面是获取主机信息的相关函数,使用时需要包含netdb.h

    1. struct hostent *gethostbyname(const char *name)
      1. 通过域名(如"www.baidu.com")获取IP地址详细信息。此函数多线程不安全,建议使用gethostbyname_r()函数代替。
      2. name:域名字符串。
      3. 成功返回信息体指针。失败返回NULL.失败时可以通过全局变量h_errno查看具体原因。
    2. struct hostent *gethostbyname2(const char *name, int af)
      1. 功能类似gethostbyname().但是调用者可以指定地址族。此函数多线程不安全,建议使用gethostbyname2_r()函数代替。
      2. af:指定地址族。要么是AF_INET(IPV4),要么是AF_INET6(IPV6)
    3. struct hostent *gethostbyaddr(const void *addr,socklen_t len, int type)
      1. 通过地址来获取IP地址的详细信息。此函数多线程不安全,建议使用gethostbyaddr_r()函数代替。
      2. addr:ip数值地址(大端格式)。一般用inet_aton()函数来生成。
      3. len:addr的字节数。即如果是IPv4,则为4四个字节.
      4. type:指定地址的格式。要么是AF_INET(IPV4),要么是AF_INET6(IPV6)。
      5. 成功返回信息体指针。失败返回NULL.失败时可以通过全局变量h_errno查看具体原因。
    4. int gethostbyname_r(const char *name,struct hostent *ret, char *buf, size_t buflen,struct hostent **result, int *h_errnop)
      1. 是gethostbyname()的升级版本。多线程安全。功能和gethostbyname()类似。
      2. ret:如果获取成功,相关信息会填充到此结构体。
      3. buf:函数的临时工作buff.
      4. buflen:buf的长度。
      5. result:如果成功,会指向转换后的结果指针。失败返回0.
      6. h_errnop:存储错误码。
      7. return:成功返回0.失败返回错误码,如果为ERANGE,表示buf大小不够。
    5. int gethostbyname2_r(const char *name, int af,struct hostent *ret, char *buf, size_t buflen,struct hostent **result, int *h_errnop)
      1. 功能和参数gethostbyname_r()相似。
    6. int gethostbyaddr_r(const void *addr, socklen_t len, int type,struct hostent *ret, char *buf, size_t buflen,struct hostent **result, int *h_errnop)
      1. 参数含义参看gethostbyname_r()。功能参看gethostbyaddr().

    下面是函数使用例程:

    #include <stdio.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netdb.h>
    void main(void)
    {
        struct hostent *pInfo = NULL;
        pInfo = gethostbyname("www.baidu.com");
        printf("%d ",pInfo->h_length);
        printf("%d ",pInfo->h_addrtype);
        printf("%s\n",pInfo->h_name);//主机域名
    
        printf("别名:");
        for(int i = 0; pInfo->h_aliases[i];i++){//打印别名表
            printf("%s ",pInfo->h_aliases[i]);
        }
        printf("\nip地址:");
        for(int i = 0; pInfo->h_addr_list[i];i++){//打印ip地址表
            printf("%s ",inet_ntoa(*(struct in_addr*)pInfo->h_addr_list[i]));
        }
    
        struct hostent *hp;
        size_t hstbuflen;
        char *tmphstbuf;
        int res;
        int herr;
        
        pInfo = malloc (sizeof (struct hostent));
        hstbuflen = 1024;
        tmphstbuf = malloc (hstbuflen);
        res = gethostbyname_r("www.baidu.com",pInfo,tmphstbuf,hstbuflen,&hp,&herr);
        printf("%s\n",pInfo->h_name);
        printf("%s\n",hp->h_name);
    }

    除此之外,本机主机在/etc/hosts的主机数据库文件中保存了一个主机名查询静态表。可以使用命令cat /etc/hosts查看。它是Linux系统上一个负责ip地址与域名快速解析的文件。hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名。在没有域名解析服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的ip地址,否则就需要使用dns服务程序来查找。可以通过将常用的域名和ip地址映射加入到hosts文件中,实现快速方便的访问。系统查询域名的优先级为dns缓存 > hosts文件 > dns服务.除此之外,也可以使用下面的函数在程序中查看映射表。

    1. void sethostent(int stayopen)
      1. 打开数据库,并设置起始值。
    2. struct hostent *gethostent(void)
      1. 获取主机数据库中的下一个条目。
    3. void endhostent(void)
      1. 关闭主机数据库。

    下面是数据库查看的使用例程:

    #include <stdio.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netdb.h>
    void main(void)
    {
        struct hostent *pInfo = NULL;
        sethostent(0);
        int index = 0;
        while(1){
            pInfo = gethostent();
            if(pInfo == NULL){
                break;
            }
            printf("-----------%2d------------\n",++index);
            printf("%s\n",pInfo->h_name);
            printf("别名:");
            for(int i = 0; pInfo->h_aliases[i];i++){
                printf("%s ",pInfo->h_aliases[i]);
            }
    
            printf("\nip地址:%d  ",pInfo->h_addrtype);
            char strbuf[32];
            for(int i = 0; pInfo->h_addr_list[i];i++){
                const char *pStr = inet_ntop(pInfo->h_addrtype,pInfo->h_addr_list[i],strbuf,32);
                if(pStr){
                    printf("%s ",pStr);
                }
            }
             printf("\n");
        }
        endhostent();
    }

    关于技术交流

    此处后的文字已经和题目内容无关,可以不看。
    qq群:825695030
    微信公众号:嵌入式的日常
    如果上面的文章对你有用,欢迎打赏、点赞、评论。二维码


    展开全文
  • 根据域名获取ip地址

    2018-03-26 17:46:19
    public static void main(String[] args) {  InetAddress ia;  try {  ia = InetAddress.getByName("www.baidu.com");  String ip = ia.getHostAddress();  System...
    public static void main(String[] args) {
            InetAddress ia;
            try {
                ia = InetAddress.getByName("www.baidu.com");
                String ip = ia.getHostAddress();
                System.out.println(ip);
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

     

    展开全文
  • 1.首先检查两个缓存:先检查浏览器是否有对应域名ip地址的缓存,有的话解析结束;没有检查本地操作系统是否有对应域名ip地址的缓存,有的话解析结束,没有进行下面正式的解析 2.主机向本地DNS服务器(LDNS)发起...

    写在前面:现在是大三暑假了,正在复习以前的知识,准备面试,尝试自己写一些博客,来复习总结

    一。DNS域名解析的过程

    当你打开一个浏览器,输入一个网址(即域名),域名解析过程如下:
    1.首先检查两个缓存:先检查浏览器是否有对应域名与ip地址的缓存,有的话解析结束;没有检查本地操作系统是否有对应域名和ip地址的缓存,有的话解析结束,没有进行下面正式的解析
    2.主机向本地DNS服务器(LDNS)发起递归查询,如果LDNS中有对应域名的ip地址缓存,LDNS把结果返回给主机,解析结束,否则继续下面
    3.本地DNS服务器向根域名服务器发起迭代查询
    1)根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址
    2)本地DNS服务器向顶级域名服务器(如.com .cn)进行查询,顶级域名服务器告诉本地域名服务器 ,下一步应该查询权限服务器的IP地址
    3)本地DNS服务器向权限服务器(如baidu等网站注册的域名服务器 二级域名)进行查询,权限服务器告诉本地域名服务器所查询的主机的IP地址(即一开始查询域名对应的ip地址)
    4)本地DNS服务器缓存这个域名和对应的ip,然后把解析的结果发给用户主机。主机的浏览器与操作系统也会缓存这个结果

    注(本地DNS服务器指的是你所在城市或离你最近的域名服务器,一般到这里大部分域名都已经可以解析成功)

    下面附上递归查询与迭代查询的图

    在这里插入图片描述
    在这里插入图片描述
    简单来说,递归查询就是主机向本地DNS服务器发起了查询,DNS服务器要自己包办所有事,最后不多比比,直接把结果给到主机;
    迭代查询是,本地DNS服务器向对方发起查询,对方只是告诉你下一步你该去哪查,不是直接给你结果,你还得自己接着找。

    二。DHCP自动获取地址的过程

    1.DHCPDISCOVER:客户机第一次登录网络时,先广播发送一个DHCPdiscover信息,发起ip地址申请
    2.DHCPOFFER:DHCP服务器收到上面客户机发出的DHCPdiscover请求,会从自己尚未分配出去的ip地址池中挑选一个发给客户机,这个消息叫做DHCPoffer,有可能广播范围内不止一个DHCP服务器,那么客户机只接受自己收到的第一个DHCPoffer
    3.DHCPREQUEST:客户机收到DHCPoffer后会再次广播发送一个DHCPRequest消息,通知提供给自己offer的DHCP服务器自己收到了offer,同时通知其他DHCP服务器,自己没有采用它们的offer,它们可以收回自己的offer了。同时,客户机还会发送一个测试的广播包,看看自己offer提供的ip地址是否是可用的,是不是已经被其他工作站使用了。如果是这样,就只好重新发送DHCPdiscover重新请求了
    4.DHCPACK:DHCP服务器收到刚才的request消息后,做出最后的确认,向客户机发送DHCPack消息,这个消息包括地址租借时长期限等消息

    经过上述4步,客户机已经成功获取了ip地址并可以使用了

    当客户机以后启动时,不需要每次都重新发送DHCPdiscover请求,而是直接发送DHCPrequset消息来尝试继续使用之前分配的ip地址,DHCP服务器收到这个消息后,会尝试让其继续使用原来的ip,并且回答一个DHCPack。
    如果之前的地址无法再提供给客户机,那么客户机就重新发送DHCPdiscover消息来重新请求。

    在这里插入图片描述

    展开全文
  • package getIp; import java.net.InetAddress; import java.net.UnknownHostException; public class GetName { public static void main(String[] args) { // TODO 自动生成的方法存根 InetAddress address...
    package getIp;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class GetName {
    
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		InetAddress address = null;
    		byte ip[] = {(byte)202,(byte)117,(byte)1,(byte)13};//IP地址
    		try {
    			address = InetAddress.getByAddress(ip);
    			String name = address.getHostName();
    			System.out.println("Host name:"+name);
    		}catch(UnknownHostException e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    
    

    截图
    在这里插入图片描述

    展开全文
  • 输入域名即可获取IP地址/* *模拟DNS协议的工作 */#include #include #include #include #include #include #pragma comment(lib , "ws2_32.lib") #pragma comment
  • 【网络】通过域名是如何获取IP地址

    千次阅读 热门讨论 2018-02-25 15:16:25
    大家都知道每一个主机都有一个唯一的IP地址对吧,比如百度的ip地址为119.75.217.109。它对于人来说非常的难记,所以为了能够让人们很好的接受它,出现了域名这一名词! 接下来举个例子,baidu.com就是我们所说的...
  • 爬虫实现:根据IP地址反查域名

    千次阅读 2019-04-13 18:25:59
    域名解析与IP地址 域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务;IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名...
  • 请结合本次实验的资料,进一步优化上次实验中的端口扫描工具,使其可以实现域名转换IP地址、主机存活测试以及延时扫描等功能。 实验文件与参考文档.rar 相关知识: 端口扫描背景及意义 网络中每台计算机犹如一...
  • 获取ip地址

    2018-02-06 11:08:06
    根据java面向对象的原理,ip地址也被封装成了对象,InetAdress import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays;... * 获取ip地址 * @author WangShuang * */ pub...
  • 域名解析过程以及IP地址和MAC地址

    千次阅读 2020-07-11 19:23:44
    浏览器通过域名(例如:www.baidu.com)发起一个网络请求的时候,会有DNS服务器将域名解析成ip地址,以便向正确的ip地址发送请求,那么这一个过程具体是怎么处理的呢? 什么是DNS 在互联网中,其实没有类似于...
  • IP地址反查主机名ping ip 就可以得到主机名,nbtstat -A xxx.xxx.xxx.xxx可得到主机名。NBTSTAT命令:用于查看当前基于NETBIOS的TCP/IP连接状态,通过该工具你可以获得远程或本地机器的组名和机器名。虽然用户使用...
  • ①不支持输入域名直接扫描:IP地址不是特别好记忆,我们一般记住的都是这个网址的域名,而需要通过查询或者通过cmd里的ping才能获得IP地址,这非常不方便。 ②connect()函数默认是阻塞,扫描端口需要一定的时间,...
  • IP地址

    2016-12-22 21:06:14
    所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。例如一个采用二进制形式的IP地址是...
  • 通过IP地址来查询对应的域名

    千次阅读 2020-07-03 09:47:12
    https://dns.aizhan.com/
  • * 获取广播地址 * */ public static String getBroadcastAddress(String subnet, String ip) { String[] ips = ip.split("\\."); String[] subnets = subnet.split("\\."); StringBuffer sb = new ...
  • 为了适合需要,现在设备IP可能变化,以dev.fuhome.net域名所... DNS,通俗讲就是将域名比如:www.fuhome.net,转换成服务器的IP地址,单片机也能轻松实现哦,很简单 原理:任何可以发送UDP数据包的设备,采用任何
  • 根据域名查找ip网站

    2020-03-06 17:13:35
    http://ip.webmasterhome.cn/?ip=res.wx.qq.com
  • DHCP获取IP地址原理 01.主机开启dhcp功能 02主机 会向网络中发送dhcp请求数据包(广播方式发送) 03dhcp服务器接收到请求包,进行数据包响应 04主机接受到响应包配置地址信息,并回复dhcp确认信息数据包 05dhcp...
  • netwox 工具提供了编号 196 的模块,它可以从指定的...【实例】已知域名 kali.org 注册商的 WHOIS 服务器为 whois.no-ip.com,从该服务器上获取域名 kali.org 的 WHOIS 信息。执行命令如下:root@daxueba:~# netwox ...
  • CIDR的IP地址的表示与划分方法

    万次阅读 多人点赞 2017-09-03 12:17:37
    早期的ip地址划分: 最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作...
  •   根据Windows系统规定,在进行DNS请求以前,Windows系统会先检查自己的Hosts文件中是否有这个地址映射关系,如果有则调用这个IP地址映射,如果没有再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比...
  • DNS服务(一):由域名解析出IP

    千次阅读 2017-02-10 22:58:28
    DNS简介DNS,就是Domain Name System的缩写,翻译过来就是域名系统,是互联网上作为域名IP地址相互映射的一个分布式数据库。DNS能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名...
  • 采用公网域名:端口的方式进入,ping域名后发现,返回的公网IP与我的公网IP相同,据我所知公司统一采用192.168.x.x的内网段,没有多级子网,怀疑这个OA服务器与我的电脑处在同一个内网中,可以获取或探测到这台服务器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,398
精华内容 4,159
关键字:

已知域名获取ip地址