实用程序检测给定数字输入的可能日期/时间格式。
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第三方库
- 热门话题
- java根据选择随机设置图标 java如何将Android Studio与本地服务器数据库SQL server 2008连接? java在点击鼠标后绘制一个椭圆形 java选项窗格相对于其父项的位置 java如何在Android中的switch case中使用String[]输入? 安卓无法从“15.0.1”确定java版本 如果满足特定条件,java是否重置计时器? java是一个实体类,可以在OOAD中返回其他实体实例吗? bash将对jar文件| cut | awk和java程序的调用集成到一个统一进程中 Spring安全更新身份验证成功时的最后登录日期 数据库身份验证中基于Java控制台的客户端服务器登录应用程序错误 java Selenium junit测试失败,驱动程序过早获取URL java LibGdx多点触摸事件混淆 带扫描仪的java打印空间 来自旧版应用程序的java springcloudsleuth头 java如何实现模板设计模式? java如何比较具有多个值的键的两个映射? 读取时R中的java MemoryError。xlsx