linux Ping 是 Linux 系统上传统的网络测试工具,常用于网络上主机的存活检测,某些功能如在线网络测试;它是通过协议 ICMP 来实现它的网络测试和管理,当 ping 命令发出之后,远程主机就会收到一个 ICMP 协议的信息,ICMP 会回传消息给本机,根据传回来的消息就能够获知到网络的通断。Ping 技术内部的机制在做网络测试时很重要,此外,对于深入探究 Linux 的 Ping 源码,也有助于了解深入ICMP 消息以及网络的交互机制。
成都创新互联公司专业为企业提供额尔古纳网站建设、额尔古纳做网站、额尔古纳网站设计、额尔古纳网站制作等企业网站建设、网页设计与制作、额尔古纳企业网站模板建站服务,10余年额尔古纳做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
Linux 中的 Ping 源码分为三部分完成,第一部分是组装 ICMP 消息发给远程主机,第二部分是等待远程主机的回应,第三部分是分析收到 ICMP 回应消息,更深入地探究 Linux Ping 源码需要掌握它关键的 C 语言编程技术:sockaddr_in/sockaddr,sendto/recvfrom,gethostbyname/gethostbyaddr 以及 IP_HDRINCL。
Linux Ping 源码文件以全局变量的形式声明,并初始化:
“`c
char snd_packet [PACKET_SIZE],
rcv_packet[PACKET_SIZE];
struct sockaddr_in dstaddr;
socklen_t addr_len;
struct sockaddr_in from;
struct icmp *icmp_hdr;
struct ip *ip_hdr;
接下来在 main 程序中,首先创建 socket,然后填写设置目标地址:
```c
// 创建套接字
int sockfd;
if ((sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP))
{
perror ("socket error");
exit (1);
}
// 将要发送到目标地址
memset (&dstaddr, 0, sizeof (struct sockaddr_in));
dstaddr.sin_family = AF_INET;
dstaddr.sin_addr = dst;
之后就是设置 IP 首部信息和 ICMP 消息:
“`c
// 设置 IP 首部信息( IP_HDRINCL 会让内核不填充 IP 首部)
if (setsockopt (sockfd, IPPROTO_IP, IP_HDRINCL, &opt, sizeof (opt))
{
perror (“setsockopt error”);
exit (1);
}
// 设置 ICMP 消息
icmp_hdr = (struct icmp*) snd_packet;
icmp_hdr->type = ICMP_ECHO;
icmp_hdr->code = 0;
icmp_hdr->un.echo.id = getpid ();
icmp_hdr->un.echo.sequence = 0;
icmp_hdr->checksum = check_sum((unsigned short*) icmp_hdr, sizeof (struct icmp));
接下来:
```c
// 发送 ICMP 消息给目标地址
if ((sendto (sockfd, snd_packet, sizeof (snd_packet), 0, (struct sockaddr*) &dstaddr, sizeof (struct sockaddr_in)))
{
perror ("sendto error");
exit (1);
}
最后,接收 ICMP 消息并处理:
“`c
// 接收 ICMP 消息
addr_len = sizeof (struct sockaddr_in);
if (recvfrom (sockfd, rcv_packet, sizeof (rcv_packet), 0, (struct sockaddr*) &from, &addr_len)
{
perror (“recvfrom error”);
exit (1);
}
// 根据接收到的 ICMP 消息,判断情况
if (icmp_hdr->type == ICMP_ECHOREPLY)
{
printf (“ping ok!\n”);
}
深入探究源码,看清楚了 Linux Ping 工具的内部机制。它使用到了 ICMP 协议,控制网络通信前,先发送 ICMP 请求,再接收 ICMP 响应消息,然后根据 ICMP 响应消息来判断网络连接正常,这样就可以实现Ping 网络测试了。
创新互联【028-86922220】值得信赖的成都网站建设公司。多年持续为众多企业提供成都网站建设,成都品牌网站设计,成都高端网站制作开发,SEO优化排名推广服务,全网营销让企业网站产生价值。
文章标题:深入探究LinuxPing源码,看清网络通信内部机理(linuxping源码)
浏览地址:http://www.shufengxianlan.com/qtweb/news7/111657.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联