问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用什么可以看到ip数据包内的时间戳呢?

发布网友 发布时间:2022-04-21 16:15

我来回答

2个回答

热心网友 时间:2023-11-15 08:37

1. 前言
在linux 2.6内核中对于网络数据包中的时间戳处理和2.4相比有了不少变化,如果原样照搬2.4就要出错
了。

2. 2.6中的tstamp
2.4中skb的时间戳直接就用struct timeval结构,而且使用时直接访问该参数。
2.6中的时间戳已经改为skb专用的时间结构struct skb_timeval:
struct sk_buff {
......
struct skb_timeval tstamp;
.....
};
定义如下:
struct skb_timeval {
u32 off_sec;
u32 off_usec;
};
和2.4区别就是强调了参数是32位无符号数,时间是相对于一个基准时间的偏差,基准点可以自己定义,
通常还是按UNIX的缺省基准时间;而在timeval中定义的是long,在64位系统中将是64位,而且是有符
号的,时间是绝对时间,即基准点是固定的。
在 include/linux/skbuff.h 中提供以下两个函数接口来获取和设置skb的时间戳:
/**
* skb_get_timestamp - get timestamp from a skb
* @skb: skb to get stamp from
* @stamp: pointer to struct timeval to store stamp in
*
* Timestamps are stored in the skb as offsets to a base timestamp.
* This function converts the offset back to a struct timeval and stores
* it in stamp.
*/
static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp)
{
stamp->tv_sec = skb->tstamp.off_sec;
stamp->tv_usec = skb->tstamp.off_usec;
}
/**
* skb_set_timestamp - set timestamp of a skb
* @skb: skb to set stamp of
* @stamp: pointer to struct timeval to get stamp from
*
* Timestamps are stored in the skb as offsets to a base timestamp.
* This function converts a struct timeval to an offset and stores
* it in the skb.
*/
static inline void skb_set_timestamp(struct sk_buff *skb, const struct timeval *stamp)
{
skb->tstamp.off_sec = stamp->tv_sec;
skb->tstamp.off_usec = stamp->tv_usec;
}

3. 记录时间

2.4中skb的时间戳是自动记录的,获取skb后就能直接读取其进入系统的时间。
而在2.6中,是否记录时间戳成为可选的,大概因为很多网络应用中用不到skb的内部时间,为其赋值将
增加系统的开销,系统增加了一个静态参数netstamp_needed来控制是否记录时间戳。
/* net/core/dev.c */
/* When > 0 there are consumers of rx skb time stamps */
static atomic_t netstamp_needed = ATOMIC_INIT(0);
// 允许记录时间戳
void net_enable_timestamp(void)
{
atomic_inc(&netstamp_needed);
}
// 停止记录时间戳
void net_disable_timestamp(void)
{
atomic_dec(&netstamp_needed);
}
// 设置时间戳
void __net_timestamp(struct sk_buff *skb)
{
struct timeval tv;
do_gettimeofday(&tv);
skb_set_timestamp(skb, &tv);
}
EXPORT_SYMBOL(__net_timestamp);

static inline void net_timestamp(struct sk_buff *skb)
{
if (atomic_read(&netstamp_needed))
// 有需要时才设置时间戳
__net_timestamp(skb);
else {
// 否则时间戳值为0
skb->tstamp.off_sec = 0;
skb->tstamp.off_usec = 0;
}
}
在发包函数dev_queue_xmit_nit()和收包函数nettf_rx(),netif_receive_skb()中就调用了
net_timestamp()函数来设置时间戳,而缺省情况下不记录时间戳,要使系统记录时间戳必须模块中调用
net_enable_timestamp()来允许记录时间戳,模块退出时调用net_disable_timestamp()停止记录。

3. 结论

对于安全设备,要识别flood、scan等攻击都要用到时间上的统计信息,所以时间戳是必须的,而如果是从2.4移植到2.6,就必须增加net_enable_timestamp()打开时间戳记录,否则将会发现时间戳都是0而使统计失败,而如果没仔细检查时间戳值的话,真是死都不知道是怎么死的。

热心网友 时间:2023-11-15 08:37

你去下载个抓包工具。对网络数据包进行抓包,然后在抓取的包里就有对IP的数据包分解。可以看见IP中的时间戳。目前国内做的比较好的网络分析抓包软件,还是推荐科来,
http://www.colasoft.com.cn/
可以下来用用,还可以免费使用。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 怎么监控路由器中某个IP的数据包 怎样查看网络数据包? 我要更换手机彩铃,怎么换哦? 手机怎么换铃声? 谁知道怎么换手机铃声? opporeno手机闹钟铃声怎么换 手机铃声在哪换? 经系统检测,您的支付账户涉嫌交易欺诈行为,违反《微信支付用户? 绿萝中间的叶子黄是什么原因 家里养的绿萝有不少叶子黄了,是不是要死了,该怎么办? 绿萝叶子发黄? 绿萝的叶子边黄色了,是缺水还是水多了呢? 绿萝叶子变黄变小怎么回事 绿萝叶子发黄是怎么回事呢? 大叶绿萝扦插后有的叶子黄了 绿萝叶子发黄的原因及解决方法 绿萝叶子发黄、烂边是什么原因? 我扦插的绿萝,长出来的叶子请问怎么是黄的? 绿萝扦插黄叶是生根了吗 土培插杆时绿萝的一片叶子黄了需要剪掉吗? 如何分析IP数据包 梅艳芳是因为什么原因去世的? 从IP数据包里能不能直接看到端口号? 如何分析TCP/IP数据包中的内容? 如何用ethereal捕获ip数据包 怎么查ip地址是哪里的 word如何把表格变成文字 用word怎么把表格中的文字转换成文本格式? 怎么将表格转换成文字 word文档如何将表格转换成文字 用word怎样将素材中的表格转换成文字 word怎么把表格转换成文字 如何将word2010中表格转换成文本 如何在word中将表格转换成文字 怎样把word里的表格转换成文字 word怎么把表格形式变成文字形式 怎么从word表格复制成文字格式 在word2003里面怎样把表格转换成文本 word2010怎么将表格转换成文字 word2003怎样把表格和文字互相转换