做网络模块的时候经常会遇到有关网址的处理.一般大致的情形是3种:

1.得到的是域名,如:www.3322.org

2.得到的是实际的IP地址,如:61.160.235.203

3.得到的是经过inet_addr处理过的IP,为unsigned long(DWORD)

一.那么如果是给出点分制的IP要转为DWORD型是如何转化呢?这个其实最简单,有专门的函数专门处理此事

unsigned long dwIP = inet_addr("222.212.12.77");
printf("IP(%s)->DWORD(%lu)/n");
//output
IP(222.212.12.77)->DWORD(1292686558)

二.第一种情况的逆转化

#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[])
{
struct in_addr net;
char tmp[16] = {0};
if(argc != 3)
{
printf("You MUST enter 3 varibal.No.1:func name No.2:case.No.3:ip(string or DWORD)/n");
return 0;
}
if(strcmp("1", argv[1]) == 0)
{
char* ip_string;
ip_string = argv[2];
unsigned long dword = inet_addr(ip_string);
printf("IP(%s)-->DWORD(%lu)/n", ip_string, dword);
}
else if(strcmp("2", argv[1]) == 0)
{
net.s_addr = (unsigned long)atol(argv[2]);
strcpy(tmp, inet_ntoa(net));
printf("DWORD(%s)-->IP(%s)/n",argv[2], tmp);
}
return 0;
}
这里给出一个点分制IP和DWORD相互转化的程序
三.如果给出的是域名而想得到点分制的IP呢?
这里给出一个接口,支持输入的类型是点分制和域名2中类型,返回的是DWORD型的IP
有一点要声明的是gethostbyname这个函数必须在网络连通的情况下才能正确完成域名的解析,你想,连个网都不通,它怎么解析?
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#define DWORD unsigned long
DWORD platform_domain2ip(const char *szDomain, char *szDotNumIP)
{
char szAddr[32] = {0};
struct hostent *pHost;
printf("input domain name(%s)/n", szDomain);
if((pHost = gethostbyname(szDomain)) == NULL)
{
printf("can not parse domain/n");
return -1;
}
printf("HostName :%s/n",pHost->h_name);
strcpy(szAddr, inet_ntoa(*((struct in_addr *)pHost->h_addr)));
printf("IP Address :%s/n", szAddr);
strcpy(szDotNumIP, szAddr);
return inet_addr(szAddr);
}
int main(int argc, char *argv[])
{
DWORD dwip;
char *ip = malloc(32);
//dwip = platform_domain2ip("www.3322.org", ip);
dwip = platform_domain2ip("61.160.235.203", ip);
printf("ip 1 (%s) 2 dw(%lu)/n", ip, dwip);
return 0;
}
//可以将main的注册分别打开来判断下结果是否正确,这里给出运行的结果,有图有真相
编译的命令再说下吧,怕有人不知道
gcc gethost.c –Wall –o gethost//在linux下
arm-hismall-linux-gcc gethost.c –Wall –o gethost//嵌入式环境下
 
此接口已经在我的工程中使用,在平台IP的解析和3322的解析中得到了应用,所以是稳定可行的.
这3中IP的转化都了解了的话,那么网络编程不就扫除了一个大石头吗?呵呵,大家功能进步
 
网上比较流行的gethostbyname的例子如下,受到了启发
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
int main(int argc, char **argv)
{
char *ptr,**pptr;
struct hostent *hptr;
char str[32];
    /* 取得命令后第一个参数,即要解析的域名或主机名 */
ptr = argv[1];
    /* 调用gethostbyname()。调用结果都存在hptr中 */
if((hptr = gethostbyname(ptr)) == NULL)
{
printf("gethostbyname error for host:%s/n", ptr);
return 1; /* 如果调用gethostbyname发生错误,返回1 */
}

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;
/* 将刚才得到的所有地址都打出来。其中调用了inet_ntop()函数*/
for(;*pptr!=NULL;pptr++)
printf("  address:%s/n", inet_ntop(hptr->h_addrtype,*pptr, str, sizeof(str)));
break;
default:
printf("unknown address type/n");
break;
}
return 0;
}

Linux API 网址转换(DWORD, IP,域名)相关推荐

  1. 用Bing API接口实现同IP域名查询(Python版)

    在https://datamarket.azure.com/account/datasets这里注册帐号后申请一个免费的KEY,一个月可以查询5000次,其申请方法网上有很多教程了. import r ...

  2. linux 网址转换工具,Linux下强大IP地址格式转换工具--netmask命令

    由于一般的路由器.防火墙等并不支持IP地址范围的方式,所以工作中经常要把IP地址范围转换成子网掩码的格式.CIDR格式.思科反向子网掩码格式等! 虽然windows下有些工具可以做到,可是使用起来不方 ...

  3. 一文看懂:网址,URL,域名,IP地址,DNS,域名解析

    今天给大家梳理一篇关于网址.URL.IP地址.域名.DNS.域名解析的白话长文,并以简单的提问-解答形式让读者更加深刻理解网址.URL.IP地址.域名.DNS.域名解析,希望有助于读者的学习,面试和工 ...

  4. 网络DNS域名转换成IP地址

    网络DNS域名转换成IP地址(完整代码,测试通过) using System; using System.Collections.Generic; using System.Linq; using S ...

  5. 网址,URL,域名,IP地址,DNS,域名解析(转载)

    一.基本常识 互联网上的所有数据都是存储在主机(服务器)上 互联网中的所有主机都拥有唯一的IP地址 互联网中任意两台主机通信都是通过IP地址来实现 上网的实质 就是获取网址对应主机上的数据并在用户主机 ...

  6. 网址,URL,域名,IP地址,DNS,域名解析

    网址,URL,域名,IP地址,DNS,域名解析 文章简介 一篇关于网址.URL.IP地址.域名.DNS.域名解析的白话长文. 编写形式:QA 背景知识 互联网上的所有数据都是存储在主机(服务器)上互联 ...

  7. TCP/IP,网络字节序与本地转换,Linux提供的转换函数htonl,htons等,sock_addr的数据结构与内容

    TCP/IP,网络字节序与本地转换,Linux提供的转换函数htonl,htons等,sock_addr的数据结构与内容 一.网络字节序存储方式: 小端存储:高位存放高地址,0x12345678的小段 ...

  8. Linux下查看DNS服务器IP地址以及使用host命令查询域名对应的IP地址

    Linux下查看DNS服务器IP地址以及使用host命令查询域名对应的IP地址 Linux使用etc/resolv.conf文件来存放DNS服务器的IP地址,使用cat命令查看. cat /etc/r ...

  9. Java将域名转换成IP

    域名转IP /*** 域名转IP* * @param domainName* @return*/public static String dnToIp(String domainName) {try ...

最新文章

  1. The substring() Method in JDK 6 and JDK 7
  2. SpringBoot使用Redis和MyBatis完成缓存数据的增删改查
  3. iOS调用系统相册、相机 显示中文标题
  4. (计算机组成原理)第三章存储系统-第三节2:ROM芯片
  5. Sublime Text 3 搭建Python3 IDE
  6. Urlrewritefilter使用说明
  7. 超详细图文教程,阿里云服务器搭建
  8. 从硅谷产品经理谈谈:AI产品经理要不要懂技术算法?
  9. 信息系统集成监理费收取标准_信息工程监理取费参考标准.doc
  10. 丽丽的redhat终于可以上网了
  11. 【南宋】【文天祥】正气歌
  12. 数据分析综述:一文带你详细了解自动驾驶技术
  13. 人工智能、机器学习、深度学习从入门到进阶学习资料整理
  14. tcp三次握手丢包后会发生什么
  15. PYNQ搭建系统-Petalinux上网方式
  16. Windows安装程序初始化时出错。安装程序将立即关闭。(原)
  17. C语言:memcpy的用法
  18. canvas动画粒子效果分享,可以做背景,超级好看
  19. android 自定义 对号,Android 自定义View 对勾CheckBox
  20. 联想g510升级方案_联想G510更换固态、加装内存条、移机械硬盘至光驱位简记

热门文章

  1. 在测量面积的时候,为了精确一点,鼠标在操作面积测量时能拖动画面吗?
  2. 【观察】从最佳实践走向行业赋能,华为重构数字化办公新体验
  3. 微星电脑不能u盘引导linux,华硕笔记本u盘重装微星怎么启动不了系统系统系
  4. 安装win10,刻录U盘,还原刻录的U盘
  5. 吴军谷歌方法论005:成就=成功率*事情的量级*做事的速度
  6. 移动增值业务系统发展趋势分析
  7. Ac Rush 楼天成回忆录
  8. 可动平行平板电容建模策略
  9. 电容笔和触控笔有什么区别?实用平板电脑手写电容笔推荐
  10. pytorch: 给tensor删除或者添加维度为1的维度(squeeze和unsqueeze)