导航:首页 > 操作系统 > linuxping实现

linuxping实现

发布时间:2022-07-17 03:56:51

Ⅰ 如何让linux每隔五分钟进行一次ping命令

1、首先打开termail命令窗口,使用命令:ping -help,如下图所示。

Ⅱ 如何在linux上使用ping命令

1、进入系统(root用户权限最大)
2、在左上角有一个类似电脑的东西,叫终端,按一下
3、输入ping + ip地址

Ⅲ linux上的ping命令是什么

很多朋友都想知道linux上的ping命令是什么?下面就一起来看看吧!
linux上的ping命令是什么

Linux系统的ping命令是经常被用到的网络命令,常常用来测试与目标主机的连通性,一些服务器为了防止被ping探测到,所以通过防火墙设置了禁止ping或者在内核参数中禁止ping,这样也就不能通过ping确定该主机是否还处于开启状态。

Linux的语言
linux开发用的是C语言和汇编语言。C语言是Linux的“母语”,这也是linux这个开源环境和本身机制所导致的。Linux的内核部分基本都是用C语言来编写的,还有部分是用汇编语言写的。

Ⅳ linux的ping命令怎么用

linux下ping 命令的用法。
在linux操作系统中,ping命令是常用的网络命令,它通常用来测试与目标主机的连通性。
经常会说“ping一下某机器,看是不是开着”、不能打开网页时会说“你先ping网关地址192.168.1.1试试”。
它通过发送ICMP ECHO_REQUEST数据包到网络主机(send ICMP ECHO_REQUEST to network hosts),并显示响应情况,这样我们就可以根据它输出的信息来确定目标主机是
否可访问(但这不是绝对的)。有些服务器为了防止通过ping探测到,通过防火墙设置了禁止ping或者在内核参数中禁止ping,这样就不能通过ping确定该主机是否还处于
开启状态。
linux下的ping和windows下的ping稍有区别,linux下ping不会自动终止,需要按ctrl+c终止或者用参数-c指定要求完成的回应次数。
下面就开始学习下这个常用的linux命令吧。
1.命令格式:
ping [参数] [主机名或IP地址]
2.命令功能:
ping命令用于:确定网络和各外部主机的状态;跟踪和隔离硬件和软件问题;测试、评估和管理网络。如果主机正在运行并连在网上,它就对回送信号进行响应。每个回送
信号请求包含一个网际协议(IP)和 ICMP 头,后面紧跟一个 tim 结构,以及来填写这个信息包的足够的字节。缺省情况是连续发送回送信号请求直到接收到中断信号
(Ctrl-C)。
ping 命令每秒发送一个数据报并且为每个接收到的响应打印一行输出。ping 命令计算信号往返时间和(信息)包丢失情况的统计信息,并且在完成之后显示一个简要总结。
ping 命令在程序超时或当接收到 SIGINT 信号时结束。Host 参数或者是一个有效的主机名或者是因特网地址。
3.命令参数:

-d 使用Socket的SO_DEBUG功能。
-f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
<p>-c 数目:在发送指定数目的包后停止。
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-I 网络界面:使用指定的网络界面送出数据包。
-l 前置载入:设置在送出要求信息之前,先行发出的数据包。
-p 范本样式:设置填满数据包的范本样式。
-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
-t 存活数值:设置存活数值TTL的大小。
4.使用实例:
实例1:ping的通的情况

复制代码代码示例:
命令:
ping 192.168.120.205
输出:
[root@localhost ~]# ping 192.168.120.205
PING 192.168.120.205 (192.168.120.205) 56(84) bytes of data.
64 bytes from 192.168.120.205: icmp_seq=1 ttl=64 time=0.720 ms
64 bytes from 192.168.120.205: icmp_seq=2 ttl=64 time=0.181 ms
64 bytes from 192.168.120.205: icmp_seq=3 ttl=64 time=0.191 ms
64 bytes from 192.168.120.205: icmp_seq=4 ttl=64 time=0.188 ms
64 bytes from 192.168.120.205: icmp_seq=5 ttl=64 time=0.189 ms
--- 192.168.120.205 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.181/0.293/0.720/0.214 ms
[root@localhost ~]#
更多Linux知识可以参考《Linux就该这么学》

Ⅳ linux的ping命令怎么用

用来检查网络是否连通,ping命令后面可以写ip或网址,如:ping
192.168.1.100,还有一些常用的参数,如:ping
-c
5
192.168.1.100
代表ping
5次,ping
-s
1024
192.168.1.100
代表每次发送1k的数据包,ping
-i
5
192.168.1.100
代表每次ping的时间间隔为5秒。
有关全套的linux的命令黑马程序员的社区当中都有全套的文章介绍啊,学习操作的话,我的方法是边看视频边实操。黑马就有一个很好的点,他们的课程都含有配套资料,内涵有笔记+课件+源码。或者你可以看看他们的软件测试相关的基础班课程大纲,基础班可以线下去上课,也是免费的。

Ⅵ 如何让linux Ping通主机

Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性。
命令格式为:ping [参数] [主机名或IP地址]
常用参数:
-c 数目 在发送指定数目的包后停止
-q 不显示任何传送封包的信息,只显示最后的结果
需要的是:1、linux下的ping和windows下的ping稍有区别,linux下ping不会自动终止,需要按ctrl+c终止或者用参数-c指定要求完成的回应次数。2、有些服务器为了防止通过ping探测到,通过防火墙设置了禁止ping或者在内核参数中禁止ping,这样就不能通过ping确定该主机是否还处于可连通状态。

Ⅶ 在linux中兑现ping部分功能怎么解决

运用C语言编写模拟常用网络命令ping命令实现一个基于linux原始套接字和ICMP协议的ping程序。该程序能用于检测主机或路由器工作是否正常。
程序中主要的函数
void alarm_handler(int); /*SIGALRM处理程序*/
void int_handler(int); /*SIGINT处理程序*/
void set_sighandler(); /*设置信号处理程序*/
void send_ping(); /*发送ping消息*/
void recv_reply(); /*接收ping应答*/
u16 checksum(u8 *buf, int len); /*计算校验和*/
int handle_pkt(); /*ICMP应答消息处理*/
void get_statistics(int, int); /*统计ping命令的检测结果*/
void l(const char *); /*错误报告*/
头文件:ping.h
#define ICMP_ECHOREPLY 0 /* Echo应答*/
#define ICMP_ECHO /*Echo请求*/
#define BUFSIZE 1500 /*发送缓存最大值*/
#define DEFAULT_LEN 56 /**ping消息数据默认大小/
/*数据类型别名*/
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
/*ICMP消息头部*/
struct icmphdr {
u8 type; /*定义消息类型*/
u8 code; /*定义消息代码*/
u16 checksum; /*定义校验*/
union{
struct{
u16 id;
u16 sequence;
}echo;
u32 gateway;
struct{
u16 unsed;
u16 mtu;
}frag; /*pmtu实现*/
}un;
/*ICMP数据占位符*/
u8 data[0];
#define icmp_id un.echo.id
#define icmp_seq un.echo.sequence
};
#define ICMP_HSIZE sizeof(struct icmphdr)
/*定义一个IP消息头部结构体*/
struct iphdr {
u8 hlen:4, ver:4; /*定义4位首部长度,和IP版本号为IPV4*/
u8 tos; /*8位服务类型TOS*/
u16 tot_len; /*16位总长度*/
u16 id; /*16位标志位*/
u16 frag_off; /*3位标志位*/
u8 ttl; /*8位生存周期*/
u8 protocol; /*8位协议*/
u16 check; /*16位IP首部校验和*/
u32 saddr; /*32位源IP地址*/
u32 daddr; /*32位目的IP地址*/
};
char *hostname; /*被ping的主机名*/
int datalen = DEFAULT_LEN; /*ICMP消息携带的数据长度*/
char sendbuf[BUFSIZE]; /*发送字符串数组*/
char recvbuf[BUFSIZE]; /*接收字符串数组*/
int nsent; /*发送的ICMP消息序号*/
int nrecv; /*接收的ICMP消息序号*/
pid_t pid; /*ping程序的进程PID*/
struct timeval recvtime; /*收到ICMP应答的时间戳*/
int sockfd; /*发送和接收原始套接字*/
struct sockaddr_in dest; /*被ping的主机IP*/
struct sockaddr_in from; /*发送ping应答消息的主机IP*/
struct sigaction act_alarm;
struct sigaction act_int;
/*函数原型*/
void alarm_handler(int); /*SIGALRM处理程序*/
void int_handler(int); /*SIGINT处理程序*/
void set_sighandler(); /*设置信号处理程序*/
void send_ping(); /*发送ping消息*/
void recv_reply(); /*接收ping应答*/
u16 checksum(u8 *buf, int len); /*计算校验和*/
int handle_pkt(); /*ICMP应答消息处理*/
void get_statistics(int, int); /*统计ping命令的检测结果*/
void l(const char *); /*错误报告*/
源程序2:ping.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h> /*是Linux系统的日期时间头文件*/
#include<unistd.h> /*是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数*/
#include<string.h>
#include<sys/socket.h> /*对与引用socket函数必须*/
#include<sys/types.h>
#include<netdb.h> /*定义了与网络有关的结构,变量类型,宏,函数。函数gethostbyname()用*/
#include<errno.h> /*sys/types.h中文名称为基本系统数据类型*/
#include<arpa/inet.h> /*inet_ntoa()和inet_addr()这两个函数,包含在 arpa/inet.h*/
#include<signal.h> /*进程对信号进行处理*/
#include<netinet/in.h> /*互联网地址族*/
#include"ping.h"
#define IP_HSIZE sizeof(struct iphdr) /*定义IP_HSIZE为ip头部长度*/
#define IPVERSION 4 /*定义IPVERSION为4,指出用ipv4*/
/*设置的时间是一个结构体,倒计时设置,重复倒时,超时值设为1秒*/
struct itimerval val_alarm={.it_interval.tv_sec = 1,
.it_interval.tv_usec=0,
.it_value.tv_sec=0,
.it_value.tv_usec=1
};
int main(int argc,char **argv) /*argc表示隐形程序命令行中参数的数目,argv是一个指向字符串数组指针,其中每一个字符对应一个参数*/
{
struct hostent *host; /*该结构体属于include<netdb.h>*/
int on =1;
if(argc<2){ /*判断是否输入了地址*/
printf("Usage: %s hostname\n",argv[0]);
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL){ /*gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的结构指针,*/
perror("can not understand the host name"); /*理解不了输入的地址*/
exit(1);
}
hostname=argv[1];/*取出地址名*/
memset(&dest,0,sizeof dest); /*将dest中前sizeof(dest)个字节替换为0并返回s,此处为初始化,给最大内存清零*/
dest.sin_family=PF_INET; /*PF_INET为IPV4,internet协议,在<netinet/in.h>中,地址族*/
dest.sin_port=ntohs(0); /*端口号,ntohs()返回一个以主机字节顺序表达的数。*/
dest.sin_addr=*(struct in_addr *)host->h_addr_list[0];/*host->h_addr_list[0]是地址的指针.返回IP地址,初始化*/
if((sockfd = socket(PF_INET,SOCK_RAW,IPPROTO_ICMP))<0){ /*PF_INEI套接字协议族,SOCK_RAW套接字类型,IPPROTO_ICMP使用协议,调用socket函数来创建一个能够进行网络通信的套接字。这里判断是否创建成功*/
perror("raw socket created error");
exit(1);
}
setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on)); /*设置当前套接字选项特定属性值,sockfd套接字,IPPROTO_IP协议层为IP层,IP_HDRINCL套接字选项条目,套接字接收缓冲区指针,sizeof(on)缓冲区长度的长度*/
setuid(getuid());/*getuid()函数返回一个调用程序的真实用户ID,setuid()是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。*/
pid=getpid(); /*getpid函数用来取得目前进程的进程识别码*/
set_sighandler();/*对信号处理*/
printf("Ping %s(%s): %d bytes data in ICMP packets.\n",
argv[1],inet_ntoa(dest.sin_addr),datalen);
if((setitimer(ITIMER_REAL,&val_alarm,NULL))==-1) /*定时函数*/
l("setitimer fails.");
recv_reply();/*接收ping应答*/
return 0;
}
/*发送ping消息*/
void send_ping(void)
{
struct iphdr *ip_hdr; /*iphdr为IP头部结构体*/
struct icmphdr *icmp_hdr; /*icmphdr为ICMP头部结构体*/
int len;
int len1;
/*ip头部结构体变量初始化*/
ip_hdr=(struct iphdr *)sendbuf; /*字符串指针*/
ip_hdr->hlen=sizeof(struct iphdr)>>2; /*头部长度*/
ip_hdr->ver=IPVERSION; /*版本*/
ip_hdr->tos=0; /*服务类型*/
ip_hdr->tot_len=IP_HSIZE+ICMP_HSIZE+datalen; /*报文头部加数据的总长度*/
ip_hdr->id=0; /*初始化报文标识*/
ip_hdr->frag_off=0; /*设置flag标记为0*/
ip_hdr->protocol=IPPROTO_ICMP;/*运用的协议为ICMP协议*/
ip_hdr->ttl=255; /*一个封包在网络上可以存活的时间*/
ip_hdr->daddr=dest.sin_addr.s_addr; /*目的地址*/
len1=ip_hdr->hlen<<2; /*ip数据长度*/
/*ICMP头部结构体变量初始化*/
icmp_hdr=(struct icmphdr *)(sendbuf+len1); /*字符串指针*/
icmp_hdr->type=8; /*初始化ICMP消息类型type*/
icmp_hdr->code=0; /*初始化消息代码code*/
icmp_hdr->icmp_id=pid; /*把进程标识码初始给icmp_id*/
icmp_hdr->icmp_seq=nsent++; /*发送的ICMP消息序号赋值给icmp序号*/
memset(icmp_hdr->data,0xff,datalen); /*将datalen中前datalen个字节替换为0xff并返回icmp_hdr-dat*/
gettimeofday((struct timeval *)icmp_hdr->data,NULL); /* 获取当前时间*/
len=ip_hdr->tot_len; /*报文总长度赋值给len变量*/
icmp_hdr->checksum=0; /*初始化*/
icmp_hdr->checksum=checksum((u8 *)icmp_hdr,len); /*计算校验和*/
sendto(sockfd,sendbuf,len,0,(struct sockaddr *)&dest,sizeof (dest)); /*经socket传送数据*/
}
/*接收程序发出的ping命令的应答*/
void recv_reply()
{
int n,len;
int errno;
n=nrecv=0;
len=sizeof(from); /*发送ping应答消息的主机IP*/
while(nrecv<4){
if((n=recvfrom(sockfd,recvbuf,sizeof recvbuf,0,(struct sockaddr *)&from,&len))<0){ /*经socket接收数据,如果正确接收返回接收到的字节数,失败返回0.*/
if(errno==EINTR) /*EINTR表示信号中断*/
continue;
l("recvfrom error");
}
gettimeofday(&recvtime,NULL); /*记录收到应答的时间*/
if(handle_pkt()) /*接收到错误的ICMP应答信息*/
continue;
nrecv++;
}
get_statistics(nsent,nrecv); /*统计ping命令的检测结果*/
}
/*计算校验和*/
u16 checksum(u8 *buf,int len)
{
u32 sum=0;
u16 *cbuf;
cbuf=(u16 *)buf;
while(len>1){
sum+=*cbuf++;
len-=2;
}
if(len)
sum+=*(u8 *)cbuf;
sum=(sum>>16)+(sum & 0xffff);
sum+=(sum>>16);
return ~sum;
}
/*ICMP应答消息处理*/
int handle_pkt()
{
struct iphdr *ip;
struct icmphdr *icmp;
int ip_hlen;
u16 ip_datalen; /*ip数据长度*/
double rtt; /* 往返时间*/
struct timeval *sendtime;
ip=(struct iphdr *)recvbuf;
ip_hlen=ip->hlen << 2;
ip_datalen=ntohs(ip->tot_len)-ip_hlen;
icmp=(struct icmphdr *)(recvbuf+ip_hlen);
if(checksum((u8 *)icmp,ip_datalen)) /*计算校验和*/
return -1;
if(icmp->icmp_id!=pid)
return -1;
sendtime=(struct timeval *)icmp->data; /*发送时间*/
rtt=((&recvtime)->tv_sec-sendtime->tv_sec)*1000+((&recvtime)->tv_usec-sendtime->tv_usec)/1000.0;/* 往返时间*/
/*打印结果*/
printf("%d bytes from %s:icmp_seq=%u ttl=%d rtt=%.3f ms\n",
ip_datalen, /*IP数据长度*/
inet_ntoa(from.sin_addr), /*目的ip地址*/
icmp->icmp_seq, /*icmp报文序列号*/
ip->ttl, /*生存时间*/
rtt); /*往返时间*/
return 0;
}
/*设置信号处理程序*/
void set_sighandler()
{
act_alarm.sa_handler=alarm_handler;
if(sigaction(SIGALRM,&act_alarm,NULL)==-1) /*sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum指所要捕获信号或忽略的信号,&act代表新设置的信号共用体,NULL代表之前设置的信号处理结构体。这里判断对信号的处理是否成功。*/
l("SIGALRM handler setting fails.");
act_int.sa_handler=int_handler;
if(sigaction(SIGINT,&act_int,NULL)==-1)
l("SIGALRM handler setting fails.");
}
/*统计ping命令的检测结果*/
void get_statistics(int nsent,int nrecv)
{
printf("--- %s ping statistics ---\n",inet_ntoa(dest.sin_addr)); /*将网络地址转换成“.”点隔的字符串格式。*/
printf("%d packets transmitted, %d received, %0.0f%% ""packet loss\n",
nsent,nrecv,1.0*(nsent-nrecv)/nsent*100);
}
/*错误报告*/
void l(const char * on_what)
{
fputs(strerror(errno),stderr); /*:向指定的文件写入一个字符串(不写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为0;否则返回EOR(符号常量,其值为-1)。*/
fputs(":",stderr);
fputs(on_what,stderr);
fputc('\n',stderr); /*送一个字符到一个流中*/
exit(1);
}
/*SIGINT(中断信号)处理程序*/
void int_handler(int sig)
{
get_statistics(nsent,nrecv); /*统计ping命令的检测结果*/
close(sockfd); /*关闭网络套接字*/
exit(1);
}
/*SIGALRM(终止进程)处理程序*/
void alarm_handler(int signo)
{
send_ping(); /*发送ping消息*/
}
程序执行:
1、程序编译。在linux终端下执行如下命令:
gcc ping.h -o myping -std=gnu99
因为原始套接字的创建需要root用户权限,所以为了能让所有的其他用户也可以使用该程序,需要通过如下命令设置myping的set-user-id位:
$sudo chmod u+s myping

Ⅷ linux怎么ping

ping
功能说明:检测主机。
语 法:ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

补充说明:执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
参 数:
-d 使用Socket的SO_DEBUG功能。
-c<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络界面送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
我认为你应该在linux中把ping命令的各种用法实际操作一下就能够懂得了。

阅读全文

与linuxping实现相关的资料

热点内容
闽政通无法请求服务器是什么 浏览:44
怎么做积木解压神器 浏览:199
王者荣耀解压玩具抽奖 浏览:49
12位是由啥加密的 浏览:868
程序员编迷你世界代码 浏览:895
php取现在时间 浏览:246
单片机高吸收 浏览:427
怎么区分五代头是不是加密喷头 浏览:244
hunt测试服务器是什么意思 浏览:510
2013程序员考试 浏览:641
毕业论文是pdf 浏览:736
服务器跑网心云划算吗 浏览:471
单片机定时器计数初值的计算公式 浏览:801
win7控制台命令 浏览:567
猫咪成年app怎么升级 浏览:692
360有没有加密软件 浏览:315
清除cisco交换机配置命令 浏览:751
华为删除交换机配置命令 浏览:473
shell打包命令 浏览:827
加密狗插上输不了密码 浏览:187