问答文章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
电脑桌面图标大小win10win10怎么改桌面图标大小 MI 小米 SDQEJO6WM 入耳式双动圈有线耳机 蓝色-详细介绍 小米双圈耳机怎样 MI 小米 Line Free 入耳式颈挂式双动圈无线蓝牙耳机 灰色 MI 小米 SDQEJ06WM 入耳式动圈有线耳机-优质声音体验 MI 小米 SDQEJ06WM 入耳式动圈有线耳机-适用对象 MI小米Line Free入耳式颈挂式双动圈无线蓝牙耳机-适用对象 MI 小米 Line Free 入耳式颈挂式双动圈无线蓝牙耳机-详细介绍 MI 小米 Line Free 入耳式颈挂式双动圈无线蓝牙耳机-适用对象 MI 小米 Line Free 入耳式颈挂式双动圈无线蓝牙耳机 灰色-详细介绍_百度... 怎么监控路由器中某个IP的数据包 怎样查看网络数据包? 我要更换手机彩铃,怎么换哦? 手机怎么换铃声? 谁知道怎么换手机铃声? opporeno手机闹钟铃声怎么换 手机铃声在哪换? 经系统检测,您的支付账户涉嫌交易欺诈行为,违反《微信支付用户? 绿萝中间的叶子黄是什么原因 家里养的绿萝有不少叶子黄了,是不是要死了,该怎么办? 绿萝叶子发黄? 绿萝的叶子边黄色了,是缺水还是水多了呢? 绿萝叶子变黄变小怎么回事 绿萝叶子发黄是怎么回事呢? 大叶绿萝扦插后有的叶子黄了 绿萝叶子发黄的原因及解决方法 绿萝叶子发黄、烂边是什么原因? 我扦插的绿萝,长出来的叶子请问怎么是黄的? 绿萝扦插黄叶是生根了吗 土培插杆时绿萝的一片叶子黄了需要剪掉吗? 如何分析IP数据包 梅艳芳是因为什么原因去世的? 从IP数据包里能不能直接看到端口号? 如何分析TCP/IP数据包中的内容? 如何用ethereal捕获ip数据包 怎么查ip地址是哪里的 word如何把表格变成文字 用word怎么把表格中的文字转换成文本格式? 怎么将表格转换成文字 word文档如何将表格转换成文字 用word怎样将素材中的表格转换成文字 word怎么把表格转换成文字 如何将word2010中表格转换成文本 如何在word中将表格转换成文字 怎样把word里的表格转换成文字 word怎么把表格形式变成文字形式 怎么从word表格复制成文字格式 在word2003里面怎样把表格转换成文本 word2010怎么将表格转换成文字 word2003怎样把表格和文字互相转换