linux中ping怎么实现,Linux下ICMPPing如何实现?

本文介绍了在Linux环境下,如何使用ICMP协议实现Ping功能的详细代码。通过创建RAW套接字,设置ICMP报文结构,发送Echo请求并接收Echo回复来实现网络连通性检查。关键步骤包括设置IP头、ICMP头以及校验和计算。代码中涉及的关键函数有socket、inet_pton、sendto和recvfrom。
摘要由CSDN通过智能技术生成

在ICMP协议的应用中,我们使用Ping命令进行操作的任务也是比较多的。那么这里我们主要介绍的就是Linux下用ICMP实现简单的Ping功能。如果目的主机在工 输出在工状态 如果5妙内无相应 用SIGALRM信号中断进程。那么现在就让我们看看具体的Linux下用ICMP实现的Ping功能具体的代码进行一下介绍吧。

1。#include "unp。h"

2。void send_echo_req(int sockfd, struct sockaddr_in *dstaddr);

3。uint16_t in_cksum(uint16_t *addr, int len);

4。

void recv_echo_reply(int sockfd);

5。int main(int argc, char **argv)

6。{

7。int sockfd;

8。struct sockaddr_in dstaddr;

9。

if ((sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP)) == -1)

10。err_sys("socket");

11。bzero(&dstaddr, sizeof(dstaddr));

12。

dstaddr。sin_family = AF_INET;

13。dstaddr。sin_port = htons(0);

14。if (inet_pton(AF_INET, argv[1], &dstaddr。sin_addr) icmp_type = ICMP_ECHO;

29。

icmp->icmp_code = 0;

30。icmp->icmp_id = getpid();

31。icmp->icmp_seq = 1;

32。icmp->icmp_cksum = in_cksum((uint16_t *) icmp, sizeof(struct icmp));

33。

if (sendto(sockfd, buf, len, 0, (SA *)dstaddr, dstlen) == -1)

34。err_sys("sendto");

35。}

36。void recv_echo_reply(int sockfd)

37。

{

38。char buf[100];

39。ssize_t n;

40。struct ip *ip;。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值