URL的概念及其简单解析

URL:统一资源定位符。也是俗称的网址。可以简单的理解为类似文件路径,根据URL可以找到网上资源,共有三部分组成:URL = 协议标签 + 域名 + 资源路径

协议标签:即遵循的协议类型。如http(超文本传输协议),https(安全套接字超文本传输协议),ftp(文件传输协议),telnet(远程登陆协议)等等。

域名:即使用一串有意义的字符串来代替无意义的Ip。如taobao.com,www.csdn.net等等。那么带不带www的域名那个才是真正的域名呢?有兴趣的可以去看自来于漏洞人生的这张帖子http://www.vuln.cn/159。 即顶级域名其实是不带www。二级或其他级别的域名是可以带www。通常大家会通过重定向,将不带www的域名重定向至带www的域名,这样带不带www,都是无所谓的。

资源路径:即资源在本地的位置,不一定是真正的文件路径,有可能是数据库中的内存等等。但是是可以确定文件的路径的。

域名的简单解析

当理解了URL的组成之后,就会自然产生一个问题,怎么通过主机域名去获取IP地址呢?其实有一个并不是很完美的函数帮我们完成了这个问题,即gethostbyname()。当然还有其他更好的函数,如getaddrinfo()等函数。这次讲一讲gethostbyname()函数的参数和简单用法。
头文件: netdb.h
函数原型:struct hostent* gethostbyname( char* const name);
参数:即字符串形式的域名
返回值:
struct hostent {
char *name; //正式主机名
char **h_aliases; // 别名表,字符串数组
int h_addrtype; //地址族,AF_INET等等
int length;//地址的长度,为4则是ipv4,为6则是ipv6
char ** h_addr_list; //IP地址表,结构体数组
};

#include <stdio.h>
#include <netdb.h>
#include <arpa/inet.h>

int main( int argc; char* argv[])
{
    if(argc < 2)
    {
        printf("Usage:%s <域名>",argv[0]);
        exit(EXIT_FAILURE);
    }

    struct hostent *host;
    host = gethostbyname(argv[1]);
    if( host != NULL ){
        exit(EXIT_FAILURE);
    }


    //获取地址族,AF_INET
    if( host->h_addrtype == AF_INET)
    {
        //获取官方主机名
        printf("官方主机名为:%s",host->h_name);

        //获取主机别名表
        printf("主机别名表为:\n");
        while( *host->h_aliases )
        {
            printf("\r%s\n",**host->h_aliases);
        }

        //获取IP地址表
        struct in_addr **ppaddr = (strcut in_addr**) host;
        while( **ppaddr != NULL)
        {
            //将数字形式的ip转换为点分式的字符串
            printf("\r%s\n",inet_ntoa(**ppaddr));
            ppaddr++;
        }
    }
    return 0;
}

当我们成功的获取到这些信息是,在加上端口信息(端口基本是80,8080等等),就可以进行TCP/IP通信了。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值