日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入探究LinuxPing源碼,看清網(wǎng)絡(luò)通信內(nèi)部機(jī)理(linuxping源碼)

linux Ping 是 Linux 系統(tǒng)上傳統(tǒng)的網(wǎng)絡(luò)測試工具,常用于網(wǎng)絡(luò)上主機(jī)的存活檢測,某些功能如在線網(wǎng)絡(luò)測試;它是通過協(xié)議 ICMP 來實(shí)現(xiàn)它的網(wǎng)絡(luò)測試和管理,當(dāng) ping 命令發(fā)出之后,遠(yuǎn)程主機(jī)就會收到一個 ICMP 協(xié)議的信息,ICMP 會回傳消息給本機(jī),根據(jù)傳回來的消息就能夠獲知到網(wǎng)絡(luò)的通斷。Ping 技術(shù)內(nèi)部的機(jī)制在做網(wǎng)絡(luò)測試時很重要,此外,對于深入探究 Linux 的 Ping 源碼,也有助于了解深入ICMP 消息以及網(wǎng)絡(luò)的交互機(jī)制。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供額爾古納網(wǎng)站建設(shè)、額爾古納做網(wǎng)站、額爾古納網(wǎng)站設(shè)計(jì)、額爾古納網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、額爾古納企業(yè)網(wǎng)站模板建站服務(wù),10余年額爾古納做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

Linux 中的 Ping 源碼分為三部分完成,第一部分是組裝 ICMP 消息發(fā)給遠(yuǎn)程主機(jī),第二部分是等待遠(yuǎn)程主機(jī)的回應(yīng),第三部分是分析收到 ICMP 回應(yīng)消息,更深入地探究 Linux Ping 源碼需要掌握它關(guān)鍵的 C 語言編程技術(shù):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 程序中,首先創(chuàng)建 socket,然后填寫設(shè)置目標(biāo)地址:
```c
// 創(chuàng)建套接字
int sockfd;
if ((sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP))
{
perror ("socket error");
exit (1);
}

// 將要發(fā)送到目標(biāo)地址
memset (&dstaddr, 0, sizeof (struct sockaddr_in));
dstaddr.sin_family = AF_INET;
dstaddr.sin_addr = dst;

之后就是設(shè)置 IP 首部信息和 ICMP 消息:

“`c

// 設(shè)置 IP 首部信息( IP_HDRINCL 會讓內(nèi)核不填充 IP 首部)

if (setsockopt (sockfd, IPPROTO_IP, IP_HDRINCL, &opt, sizeof (opt))

{

perror (“setsockopt error”);

exit (1);

}

// 設(shè)置 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
// 發(fā)送 ICMP 消息給目標(biāo)地址
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);

}

// 根據(jù)接收到的 ICMP 消息,判斷情況

if (icmp_hdr->type == ICMP_ECHOREPLY)

{

printf (“ping ok!\n”);

}

深入探究源碼,看清楚了 Linux Ping 工具的內(nèi)部機(jī)制。它使用到了 ICMP 協(xié)議,控制網(wǎng)絡(luò)通信前,先發(fā)送 ICMP 請求,再接收 ICMP 響應(yīng)消息,然后根據(jù) ICMP 響應(yīng)消息來判斷網(wǎng)絡(luò)連接正常,這樣就可以實(shí)現(xiàn)Ping 網(wǎng)絡(luò)測試了。

創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌網(wǎng)站設(shè)計(jì),成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價值。


文章題目:深入探究LinuxPing源碼,看清網(wǎng)絡(luò)通信內(nèi)部機(jī)理(linuxping源碼)
本文網(wǎng)址:http://www.5511xx.com/article/dpcegig.html