QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1292|回复: 5

程序中如何把网址解析成ip呢

[复制链接]
发表于 2004-10-29 21:55:38 | 显示全部楼层 |阅读模式
想做一个freeip的软件,但有几个小问题不明白
1.如何解析一个给出的网址解析成ip。与ping一样
2. 有这样一张表

网络号                      主机掩码    网络掩码
network-number             host-bits    netmask
-------------------- ---------------    ---------------
59.64.0.0                0.7.255.255    255.248.0.0         
59.72.0.0                0.1.255.255    255.254.0.0         
60.0.0.0                0.31.255.255    255.224.0.0         
60.63.0.0                0.0.255.255    255.255.0.0         
61.28.0.0                 0.0.15.255    255.255.240.0
。。。。
各个字段分别是什么意思呀?
 楼主| 发表于 2004-10-29 23:07:14 | 显示全部楼层
在linux-c-lib中找到这个,不知是不是:
Function: struct hostent * gethostbyaddr (const char *addr, int length, int format)


The gethostbyaddr function returns information about the host with Internet address addr. The length argument is the size (in bytes) of the address at addr. format specifies the address format; for an Internet address, specify a value of AF_INET.
回复

使用道具 举报

发表于 2004-10-30 00:27:59 | 显示全部楼层
gethostbyname
回复

使用道具 举报

 楼主| 发表于 2004-10-30 08:33:17 | 显示全部楼层
这两个有什么区别吗??
回复

使用道具 举报

发表于 2004-10-30 10:21:37 | 显示全部楼层
功能正好相反,看看man手册。
回复

使用道具 举报

 楼主| 发表于 2004-11-4 04:09:22 | 显示全部楼层
实现获取ip的代码
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc,char **argv) {
        struct hostent *answer;
        struct in_addr address,** addrptr;
        char **next;
       
        if (argc !=2){
                fprintf(stderr,"only a single argument is supported\n");
                return 1;
        }
       
        if (inet_aton(argv[1],&address))
                answer=gethostbyaddr((char *)&address,sizeof(address),AF_INET);
        else
                answer=gethostbyname(argv[1]);
        if(!answer){
                herror("error looking up host");
                return 1;
        }
        printf("canonical hostname:%s\n",answer->h_name);
        if (answer->h_aliases[0]){
                 printf("Aliases:");
                for (next=answer->h_aliases;*next;next++)
                        printf("%s,*next");
                        printf("\n");
        }
        printf("Addresses:");
        for (addrptr=(struct in_addr **) answer->h_addr_list;*addrptr;addrptr++)
                printf("%s",inet_ntoa(**addrptr));
        printf("\n");
       
        return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 03:26 , Processed in 0.060676 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表