linux icmp 时间戳过滤,ICMP-linux c 时间戳请求功能实现
#include //校验和计算
unsigned short calc_cksum(char *buff,int len)
{
int blen = len;
unsigned short *mid = (unsigned short*)buff;
unsigned short te = 0;
unsigned int sum = 0;
while(blen > 1)
{
sum += *mid++;
blen -= 2;
}
if(blen == 1)
{
te = *(unsigned char*)mid;
te = (te << 8) & 0xff;
sum += te;
}
sum = (sum >> 16) + (sum&0xffff);
sum += sum >>16;
return (unsigned short)(~sum);
}
static void time_packet(char *buff,int len,int id,int seq)
{
time_t *ti;
struct icmp *icmp = (struct icmp*)buff;
struct timeval val;
icmp->icmp_type = 13; //Timestamp Request
icmp->icmp_code = 0;
icmp->icmp_cksum = 0; //first set zero
icmp->icmp_id = id & 0xffff;
icmp->icmp_seq = seq;
gettimeofday(&val,NULL);
//24*60*60 = 86400 自午夜开始计算的毫秒数
icmp->icmp_otime = htonl((val.tv_sec % 86400)*1000 + val.tv_usec / 1000);
icmp->icmp_rtime = 0;
icmp->icmp_ttime = 0;
//计算校验和
icmp->icmp_cksum = calc_cksum(buff,len);
return;
}
void parse_packet(char *buff,int len)
{
struct icmp *icmp;
struct iphdr *iphead = (struct iphdr *)buff;
struct in_addr addr;
addr.s_addr = iphead->saddr;
printf("comefrom ip=%s ",inet_ntoa(addr));
//跳过ip头
icmp = (struct icmp *)(buff+sizeof(struct iphdr));
//看传输回的包校验和是否正确
if(calc_cksum((char *)icmp,len-sizeof(sizeof(struct iphdr))) > 1)
{
printf("receiver error\n");
return;
}
printf("type=%d seq=%d id=%d pid=%d otime=%d rtime=%d ttime=%d\n",icmp->icmp_type,icmp->icmp_seq,icmp->icmp_id,(getpid()&0xffff),ntohl(icmp->icmp_otime),ntohl(icmp->icmp_rtime),ntohl(icmp->icmp_ttime));
}
int main(int argc,char *argv[])
{
int skfd;
struct sockaddr_in addr={0};
struct sockaddr_in saddr={0};
char buff[64]={0};
char recvbuff[512]={0};
int ret;
int addrlen = 0;
int count = 5;
int i = 1;
skfd = socket(PF_INET,SOCK_RAW,IPPROTO_ICMP);
if(skfd < 0)
{
printf("socket error\n");
return -1;
}
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.21.244");
//每一秒发送一次 共发送count次
while(count > 0)
{
//序列号seq 从1 开始传输 buff的大小为64
memset(buff,0,sizeof(buff));
time_packet(buff,64,getpid(),i);
i++;
count --;
//将数据发送出去
ret = sendto(skfd,buff,64,0,(struct sockaddr *)&addr,sizeof(addr));
if(ret <= 0)
{
printf("send error\n");
goto out;
}
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)
{
printf("recv error\n");
continue;
}
parse_packet(recvbuff,ret);
sleep(2);
}
out:
close(skfd);
return 0;
}
linux icmp 时间戳过滤,ICMP-linux c 时间戳请求功能实现相关推荐
- linux 命令行 过滤,利用linux命令行工具进行文本行过滤
在日常工作中会遇到需要筛选过滤要查看的日志等文本文件的任务,例如需要查看日志文件的最后几行等. 下面总结一下常见的对文本行过滤的方法. 常用命令行工具 接下来主要使用的是head,tail,sed和a ...
- imu与gps之间的时间戳_TCP 窗口缩放、时间戳和 SACK(2) | Linux 中国
导读:有很多文章出于各种"性能调优"或"安全性"原因,建议禁用 TCP 扩展,本文提供了这些扩展功能的背景,为什么会默认启用,它们之间是如何关联的,以及为什么通 ...
- linux时间戳转换c语言,Unix时间戳和北京时间的相互转换(C语言实现 )
一.问题背景 最近项目中需要上传包含时间戳的设备数据到服务器平台.原本想把"年","月","日","时","分 ...
- Linux·DNS协议、ICMP协议、NAT技术
目录 DNS协议 DNS背景 编辑域名简介 域名解析过程 使用dig工具分析DNS过程 ICMP协议 ICMP功能 ICMP协议格式 编辑ping命令 一个值得注意的坑 traceroute命令 ...
- 计算机网络 day6 arp病毒 - ICMP协议 - ping命令 - Linux手工配置IP地址
目录 arp协议 arp病毒\欺骗 arp病毒的运行原理 arp病毒产生的后果: 解决方法: ICMP协议 ICMP用在哪里? ICMP协议数据的封装过程 编辑 为什么icmp协议封装好数据后,还要 ...
- 易语言linux时间戳转换,生成时间戳(如何正确地生成时间戳)
如何正确地生成时间戳 各种语言版本的时间戳 1.Swift NSDate().timeIntervalSince1970 2.Go int32(time.Now().Unix()) 3.Java (i ...
- Linux 使用grep过滤多个条件及grep常用过滤命令
这篇文章主要介绍了Linux 使用grep筛选多个条件及grep常用过滤命令,需要的朋友可以参考下 cat log.txt | grep 条件: cat log.txt | grep 条件一 | gr ...
- linux grep文件过滤与分割命令
linux grep文件过滤与分割命令 文章目录 linux grep文件过滤与分割命令 1.grep命令 选项 grep命令常见用法 grep递归搜索文件 2.split命令 选项 实例 3.loo ...
- linux操作系统 第02章 linux操作做基础
第2章 Linux操作基础 ...
- 用C语言实现linux的ping,用C语言实现Ping程序功能
大部分人用ping命令只是作为查看另一个系统的网络连接是否正常的一种简单方法. 在这篇文章中,作者将介绍如何用C语言编写一个模拟ping命令功能的程序. ping命令是用来查看网络上另一个主机系统的网 ...
最新文章
- 导入Scrapy 项目报错:no module named scrapy
- ZOJ - 2955 Interesting Dart Game(鸽巢原理+完全背包)
- C++回声服务器_4-UDP connect版本客户端
- 对抗告警疲劳的8种方法
- 使用Excel VBA(快捷键)(加菜单)
- 从FTP下载文件带进度条
- 小程序入门学习16--上传小程序至github
- bp神经网络数字识别matlab_卷积神经网络学习识别手写数字时的可视化
- java动态代理实现与原理详细分析(【转载】By--- Gonjan )
- 查询MySQL中某个数据库中有多少张表
- 统计挖掘那些事(七)—— 如何直观地理解过拟合与欠拟合那些事~
- WebsResponse
- 每日英语:Targeting Grandpa: China’s Seniors Hunger for Ads
- ASP.NET动态网站开发培训-26.在线编辑器FreeTextBox的使用
- 软件测试工程师需要具备哪些能力?
- 非诚勿扰:比舒淇更孤单的是谁?
- 浏览器的input禁用输入法
- 计算机专业专科可以进的国企,专科学这四个专业!考国企、事业编制会容易很多...
- 畅捷通T+密码清除后,空密码无法登录账套解决办法
- 晕菜:新域名在60天内不能转移。
热门文章
- 初一上册计算机教案,人教版七年级上册信息技术教学设计
- 小米 秋招 笔试 编程题 句子反转
- 移动端 Retina屏 各大主流网站1px的解决方案
- topic是短语还是句子_词组、短语、句子--Unit 3 Topic 3
- linux 限制单个ip流量,centos 的单ip流量控制-CentOS下利用iptables限速及限制每IP连接数...
- 大学英语精读第二版(第五册)复习笔记——文章内容摘要
- 回顾一年的工作历程_但回首这一年来的工作经历
- python可以excel_python能处理excel吗
- 东方博易OJ——1002 - 【入门】编程求解1+2+3+...+n
- M1芯片MacBook安装手机app