x_ping.c
来自「TCP-IP红宝书源代码」· C语言 代码 · 共 61 行
C
61 行
/* x_ping.c - x_ping */
#include <conf.h>
#include <kernel.h>
#include <network.h>
/*------------------------------------------------------------------------
* x_ping - do ICMP echo to a given destination
*------------------------------------------------------------------------
*/
COMMAND
x_ping(stdin, stdout, stderr, nargs, args)
int stdin, stdout, stderr, nargs;
char *args[];
{
char str[80], host[32], *p;
IPaddr dst;
int got, i;
int np, ds; /* # packets to send, data size */
ds = 56;
if (nargs == 3) {
ds = atoi(args[2]);
} else if (nargs != 2) {
sprintf(str, "usage: ping host [size]\n");
write(stderr, str, strlen(str));
return OK;
}
dst = name2ip(args[1]);
got = 0;
np = 10;
i = 0;
while(TRUE) {
struct ep *packet;
packet = (struct ep *)recvtim(10); /* wait up to 1 sec */
if (packet != (struct ep *)TIMEOUT) {
struct ip *pip = (struct ip *)packet->ep_data;
struct icmp *pic = (struct icmp *)pip->ip_data;
sprintf(str, "%d octets from %s: icmp_seq %d\n",
pip->ip_len - IP_HLEN(pip),
ip2dot(host, pip->ip_src),
pic->ic_seq);
write(stdout, str, strlen(str));
freebuf(packet);
got++;
} else {
if (i >= np)
break;
icmp(ICT_ECHORQ, 0, dst, i, ds);
i++;
}
}
sprintf(str, "received %d/%d packets (%d %% loss)\n", got, 10,
(100 * (10-got))/10);
write(stdout, str, strlen(str));
return(OK);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?