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命令的各種用法實際操作一下就能夠懂得了。