ICMP linux c PING功能實現

2021-08-28 02:58:15 字數 1750 閱讀 8440

報文格式:

#include #include #include #include #include #include //校驗和計算

unsigned short calc_cksum(char *buff,int len)

//資料長度為奇數比如65 上面的while是按16計算的 最後就會剩下一位元組不能計算

if(blen == 1)

sum = (sum >> 16) + (sum&0xffff);

sum += sum >>16;

return (unsigned short)(~sum);

}static void icmp_packet(char *buff,int len,int id,int seq)

void parse_packet(char *buff,int len)

gettimeofday(&nv,null);

val = (struct timeval *)icmp->icmp_data;

printf("type=%d seq=%d id=%d pid=%d usec=%d \n",icmp->icmp_type,icmp->icmp_seq,icmp->icmp_id,(getpid()&0xffff),nv.tv_usec - val->tv_usec);

}int main(int argc,char *argv)

;

struct sockaddr_in saddr=;

char buff[64]=;

char recvbuff[512]=;

int ret;

int addrlen = 0;

int count = 5;

int i = 1;

skfd = socket(pf_inet,sock_raw,ipproto_icmp);

if(skfd < 0)

addr.sin_family = af_inet;

addr.sin_addr.s_addr = inet_addr("192.168.13.148");

//每一秒傳送一次 共傳送count次

while(count > 0)

else

printf("send success ret=%d\n",ret);

//接收echo replay

memset(recvbuff,0,sizeof(recvbuff));

memset(&saddr,0,sizeof(saddr));

addrlen = sizeof(saddr);

ret = recvfrom(skfd,recvbuff,sizeof(recvbuff),0,(struct sockaddr *)&saddr,&addrlen);

if(ret <= 0)

parse_packet(recvbuff,ret);

sleep(1);

}out:

close(skfd);

return 0;

}

vue element echarts 換膚功能

demo中的換膚效果沒有用到css預編譯處理 整體的思路是 預先定義好多套css樣式表分別放到static檔案中,根據按鈕切換在dom上掛載相對應的css,聽上去是個比較笨的方法,下面直接上 2.將預設的主題放在vuex中 import vue from vue import vuex from v...

ios xmpp openfire實現聊天功能

ios使用xmppframework 來實現基本的聊天功能 1.使用xmppstream連線openfire 需要賬戶,密碼和伺服器位址埠一般為5222 bool connect if userid nil pass nil 設定使用者 xmppstream setmyjid xmppjid jid...

武當乾坤鐵掌功

武當乾坤鐵掌功是鐵掌功中的上乘 具有很強的實戰及一定的養生價值,歷來受到武林中人的推崇。鐵掌功是強身健體,內外兼修的武林秘技。拳諺說 寧挨一拳,不挨一掌。足見掌的威力。其 易學 易練 易懂,它對強身防身抗病有著獨特的功能。習練此功,能調整氣血,堅實肌肉,疏通經絡,久練此功可起到內氣充盈,精力充沛,而...