c语言收集域名信息,使用C语言获取指定域名的IP

news/2024/7/16 6:52:29 标签: c语言收集域名信息

最近正在学习使用C语言发送电子邮件,但是发送邮件需要连接到SMTP服务器,C语言只支持连接IP,而不支持连接域名,那么就需要将SMTP地址转换成IP地址了。虽然我们可以使用DOS命令中的ping命令来将SMTP服务器的IP地址转换出来,但这并不是我的本意。在网上找贴半天,实在是让人无语。最后,自己终于研究出来,故发表出来,希望能够帮助到大家。

如果要将一个域名转换成一个IP地址,需要使用到Winsock中的函数gethostbyname。相反,如果我们想将一个IP地址转换成一个域名,则使用gethostbyaddr。今天,我们主要来详细讲解gethostbyname。

struct hostent FAR *PASCAL FAR gethostbyname(const charFAR* name);

其中,name指的是指向一个域名的指针,该函数返回的是一个hostent型的结构体。

结构体定义如下:

0818b9ca8b590ca3270a3433284dd417.png

structhostent

{char FAR *h_name;char FAR * FAR *h_aliases;shorth_addrtype;shorth_length;char FAR * FAR *h_addr_list;

};

0818b9ca8b590ca3270a3433284dd417.png

hostent->h_name

指的是主机的规范名,例如www.google.com.hk的规范名其实是www-wide.l.google.com

hostent->h_aliases

指的是主机的别名,例如www.google.com.hk就是google他自己的别名,有时候,有的主机有好几个别名,这些其实都是为了易于用户的记忆而为自己的网站多取的名字

hostent->h_addrtype

指的是主机IP地址的类型,可能是IPV4(AF_INET)或者是IPV6(AF_INET6)

hostent->h_length

指的是主机IP地址的长度,如果是IPV4,则是4

hostent->h_addr_list

表示主机的IP地址,需要使用inet_ntoa转换成字符串格式的IP地址。IP地址可能有1——更多个。

inet_ntoa函数将一个IP转换成一个互联网标准点分格式的字符串。

char FAR * inet_ntoa( struct in_addr in);

注意:如果使用inet_ntoa转换hostent->h_addr_list,需要强制转换成struct in_addr *格式。

下面是源代码例程

0818b9ca8b590ca3270a3433284dd417.png

char * smtpIp(char *url)

{

HOSTENT*iphost;char ipconfig[20];if((iphost = gethostbyname(url)) !=NULL)

{int i = 0;while(iphost->h_addr_list[i])

{char ip[20];

memcpy(&ip, inet_ntoa(*((struct in_addr *)iphost->h_addr_list[i])), 20);

printf("%s", ip);

memset(ip,'\0', 20);

i++;

}

}

}

0818b9ca8b590ca3270a3433284dd417.png

注意:在调用任何Winsock函数之前,必须先调用WSAStartup函数


http://www.niftyadmin.cn/n/1214767.html

相关文章

iphone屏蔽系统更新_iOS 12系统频繁提示更新,教你一招屏蔽更新!

「 改变能改变的一切,接受不能改变的一切! 」▼iOS 系统老是频繁推送小更新,极不友好地打扰自己的用户,刚纠结更新完上一个版本,新版本又来了!尤其是旧版本用着流畅稳定,新版本还会搞出新问题。…

WPF 关于圆角的制作

原文:WPF 关于圆角的制作1、使用Boder(一般情况): 设置CornerRadius属性 <Border x:Name"border" CornerRadius"20"> ... </Border> 2、创建ClippingBorder类&#xff1a; View Code using System; using System.Collections.Generic; using …

举例说明层次分析的三大原则_LabVIEW面向对象编程_初窥门槛(2)_设计原则(SOLID)...

该系列一共是9篇文章&#xff0c;本文是该系列的第二篇&#xff0c;是讲述通用的面向对象编程设计原则&#xff08;SOLID&#xff09;&#xff0c;LabVIEW作为一门具备面向对象编程范式的图形化编程语言当然也要遵循上述的通用设计原则&#xff0c;当然除了接口隔离原则无法直接…

ubuntu12.04图形界面与命令行界面切换

对于12.04的ubuntu桌面系统&#xff0c;如果想在开机的时候直接进入字符界面&#xff0c;那可以&#xff1a; 编辑文件 /etc/init/lightdm.conf&#xff0c;在第12行附近&#xff0c;原句“ and runlevel [!06]” 改为“ and runlevel [!026]”即可&#xff0c; 之后如果想切换…

android 点击效果图,Android MaterialDesign之水波点击效果的几种实现方法

添加一个自定义的布局类 MaterialLayout.classpublic class MaterialLayout extends RelativeLayout {private static final int DEFAULT_RADIUS 10;private static final int DEFAULT_FRAME_RATE 10;private static final int DEFAULT_DURATION 200;private static final i…

accdb原有的数据怎么清除_VBA与数据库,自动化完成你大量数据处理工作的利器...

大家好&#xff0c;VBA是我在各个平台的主要推广的一大课题&#xff0c;VBA全称是Visual Basic for Applications&#xff0c;是实现个人小型数据自动化处理的最为可靠的工具。我们在平时的工作中&#xff0c;数据处理一直是工作的主要内容之一&#xff0c;如何利用VBA&#xf…

ec200s 封装_英飞凌OptiMOS?源极底置功率MOSFET系列新添PQFN封装的40 V装置

当代的电源系统设计需要高功率密度等级和精巧的外型尺寸&#xff0c;以期得到最高的系统级性能。英飞凌科技股份公司近日通过专注于强化元器件产品达到系统创新&#xff0c;来应对这一挑战。继2 月份推出 25 V 装置后&#xff0c;英飞凌又推出了 OptiMOS™ 40 V 低电压功率 MOS…

10月23日云栖精选夜读 | 2018 中国开源年度报告发布,阿里系独占鳌头

近日&#xff0c;开源社发布了《2018 中国开源年度报告》&#xff0c;以调研和数据报告的方式展示了中国开源的全貌。其中阿里系独占鳌头&#xff0c;活跃度前5的开源产品阿里系占了4个。而在这4个开源产品中&#xff0c;只有PouchContainer是非前端产品。 热点热议 2018 中国开…