实用程序检测给定数字输入的可能日期/时间格式。
epoch_analyzer的Python项目详细描述
一个python模块,用于分析数字,以确定它们可能基于哪个纪元,以及它们可能以什么单位表示。
安装
使用pip安装:
pip install epoch_analyzer
对于Windows:
py -m pip install epoch_analyzer
或者,您可以下载或克隆此repo并调用pip install -e .。
在python中的用法
从包epoch_分析器导入EpochTester
from epoch_analyzer import EpochTester
如果您愿意,可以传递一个用作参考的最小日期和最大日期。
给定结果对象,您可以调用test或convert,以测试可能的格式的数字,或者(批处理)将数字列表转换为日期
使用epochtester.测试
您可以将一个数字(例如计数器)传递给此方法。
对于每个数字执行一次测试转换,然后检查哪个格式与大多数值匹配,将返回一个counter对象。通过对该对象调用most_common,可以从最可能的选项开始按顺序迭代项
fromepoch_analyzerimportEpochTestertester=EpochTester()results=tester.test({12345435,2999663906})formatch,occurrenceinresults.most_common():print("\t%s:\t%d%%"%(match,occurrence))
使用epochtester.convert
如果您有一个未知类型,并希望转换到所有可能的选项,您可以使用此方法如果您已经知道获取转换器并使用它的更好格式,请参见下面描述的选项。
fromepoch_analyzerimportEpochTestertester=EpochTester()results=tester.convert({12345435,2999663906})forinput,matchesinresults.items():print("%d: #%d matches"%(input,len(matches)))forlabel,resultinmatches:print("\t%s:\t%s%%"%(label,result))
输出:
2999663906: #1 matches 4-Bytes bit-based timestamp since 1970: 2014-11-05 19:52:34% 12345435: #0 matches
特定转换的用法
如果你知道你用的是哪个历元,并且你正在转换单个数字,那么转换就相当简单了在这种情况下,您不必使用convert方法,而只需请求特定的转换器并使用它,请参见下面的示例。
fromepoch_analyzerimportEpochTesterconvertor=EpochTester().get_convertor('4-Bytes bit-based timestamp since 1970')print(convertor.convert_to_date(2999663906))# prints '2014-11-05 19:52:34'
从命令行使用
正确安装模块后,路径中应该可以使用命令epoch。有很多选项,这些选项在调用没有任何参数的命令时列出
一些示例:
只需转换一个值:
epoch 1394543556
输出:
For input 1394543556: Number Of Seconds Since Unix Epoch (2014-03-11 13:12:36)
转换文件中的时间戳列表,并将其作为unix时间戳输出到文件中。
epoch -f input.txt -u > output-timestamps.txt
从文件的时间戳列表中总结匹配项。
epoch -f input.txt --summary
输出:
Summary for5 inputs: 1. Number Of Seconds Since Unix Epoch: 40% 2. Number Of Minutes Since Mac OSX Epoch: 40% 3. Number Of Mili Seconds Since Unix Epoch: 20%
提供一个最小值(在这种情况下,超出此unixtime的范围):
epoch --min2014-12-01 1394543556
输出:
For input 1394543556:
No matching pattern was found
支持空格分隔的十六进制输入:
epoch "aa bb" --hex
输出(请注意,big和little endian都经过测试):
For input 48042: No matching pattern was found For input 43707: No matching pattern was found
命令行中的用法:扫描二进制文件
正确安装模块后(请注意,termcolor是一个先决条件),路径中应该可以使用命令epoch\u scan。有很多选项,这些选项在调用没有任何参数的命令时列出
表格宽度是制作列和点模式所必需的。如果您的数据具有固定的表宽度,那么在大多数情况下,只需调整十六进制编辑器的大小,直到您看到清晰的重复或相似数据列显示出来,就很容易检测到它。比较以下两个示例:
ª..!B....tI.v..:r.#..gd.....l...._..2..9D.a..T..d...ª..!B ........ .wª..!B....tI.w..9r.#..gd.....l...._..2..9D.a..T..d...ª..!B ...... ...wª..!B....tI.w..9r.#..gd.....l...._..2..9D.a..T..d...ª..!B .... .....wª..!B....tI.w..9q."..id.....l...._..2..9D.a..T..d...ª..!B .. .......wª..!B....tI.w..9q."..id.....l...._..2..9D.a..T..d...ª..!B .........w
ª..!B....tI.v..:r.#..gd.....l...._..2..9D.a..T..d...ª..!B .........w ª..!B....tI.w..9r.#..gd.....l...._..2..9D.a..T..d...ª..!B .........w ª..!B....tI.w..9r.#..gd.....l...._..2..9D.a..T..d...ª..!B .........w ª..!B....tI.w..9q."..id.....l...._..2..9D.a..T..d...ª..!B .........w ª..!B....tI.w..9q."..id.....l...._..2..9D.a..T..d...ª..!B .........w
一些示例:
扫描上述文件中的epoch值:
epoch_scan -t 44 raw.log
输出:
Sample picked from offset: 4440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(big end.)22282752=> 1970-05-10 00:08:00 4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)1677722196=> None 4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.) -1441202176 => 2012-08-12 16:00:00 4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)1109458944=> 1986-08-16 16:00:00 4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(big end.) -1441791967 => 2012-08-08 00:00:33 4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)1109458960=> 1986-08-16 16:00:16 4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)117506064=> None 4-Bytes bit-based timestamp since 1970[0.900000]
输出显示文件中的随机样本每个匹配项都高亮显示(蓝色表示大端,绿色表示小端)。字节以大写十六进制显示,并以4字节为一组显示为了帮助解释结果,将显示匹配格式的数值和转换后的值。
其他可能有用的选项包括:
- 使用固定样本-s
- 如果您期望特定的时段,请定义–min或–max
- 将项目数限制为进程-c
推荐PyPI第三方库
- 热门话题
- 安卓 studio安装的java Unity本机广告 java如何将映射转换为对象 java我试图使用rest控制器从h2数据库中检索记录,但它说没有数据集 反思为什么会抛出java。lang.InstanceException? 在opensuse中找不到Java/javac java为Android上的谷歌地图添加了5900多个标记。如何有效地做 java如何在if语句中使用循环 java如何在JPA(Hibernate)中映射一对多关系和复合主键? 如何在Java中读取和写入外部进程? Java线程。睡眠时间最短 java使用EclipseGradle插件如何离线托管和使用依赖项(库jar文件) java为什么虚拟引用在排队时没有被清除? java无法理解如何创建用于响铃报警的取消按钮 java解析不应通过注入容器错误发生 java Toast或ProgressDialog不显示 java在自定义对象上使用优先级队列的更好方法 java格式的。wmv文件。(或者任何视频文件都很好) 从页面调用另一个侦听器后,不会调用java JSF<f:ajax>侦听器 java注释ConfigApplicationContext不能多次刷新有什么原因吗?