【发布时间】:2019-10-05 21:25:09
【问题描述】:
我有一个名为“extract_3month_fromshodan.json”的 json 横幅文件,它具有多个标签的键值,即 ip_str=XXX.XX.XXX.XX, port=80, timestamp="2018-08-11T04:56:17.312039 ", data="210!connection successful" 等等。这样文件就有了将近 400 个 IP 的横幅。
源/json 横幅 (extract_3month_fromshodan.json) 文件示例:
{
"asn": "AS17676",
"hash": -619087650,
"ip": 2120548325,
"isp": "Softbank BB",
"transport": "udp",
"data": "HTTP/1.1 200 OK\r\nCache-Control: max-age=120\r\nST: upnp:rootdevice\r\nUSN: uuid:12342409-1234-1234-5678-ee1234cc5678::upnp:rootdevice\r\nEXT:\r\nServer: miniupnpd/1.0 UPnP/1.0\r\nLocation: http://192.168.2.1:52869/picsdesc.xml\r\n\r\n",
"port": 1900,
"hostnames": [
"softbank126100255229.bbtec.net"
],
"location": {
"city": "Toyota",
"region_code": "01",
"area_code": null,
"longitude": 137.14999999999998,
"country_code3": "JPN",
"latitude": 35.08330000000001,
"postal_code": "457-0844",
"dma_code": null,
"country_code": "JP",
"country_name": "Japan"
},
"timestamp": **"2018-09-12T15:42:34.012436",**
"domains": [
"bbtec.net"
],
"org": "XXXXXX BB",
"os": null,
"_shodan": {
"crawler": "d264629436af1b777b3b513ca6ed1404d7395d80",
"options": {},
"module": "upnp",
"id": null
},
"opts": {},
"ip_str": **"126.100.255.229"**
}
{
"asn": "AS17676",
"hash": 1371060454,
"ip": 2120509894,
"isp": "Softbank BB",
"transport": "udp",
"data": "HTTP/1.1 200 OK\r\nCache-Control: max-age=1800\r\nST: upnp:rootdevice\r\nUSN: uuid:63041253-1019-2006-1228-00018efed688::upnp:rootdevice\r\nEXT:\r\nServer: OS 1.0 UPnP/1.0 Realtek/V1.3\r\nLocation: http://192.168.2.1:52881/simplecfg.xml\r\n\r\n",
"port": 1900,
"hostnames": [
"softbank126100105198.bbtec.net"
],
"location": {
"city": "Yamashitacho",
"region_code": "18",
"area_code": null,
"longitude": 130.55,
"country_code3": "JPN",
"latitude": 31.58330000000001,
"postal_code": "892-0816",
"dma_code": null,
"country_code": "JP",
"country_name": "Japan"
},
"timestamp": **"2018-08-11T04:56:17.312039"**,
"domains": [
"bbtec.net"
],
"org": "Softbank BB",
"os": null,
"_shodan": {
"crawler": "6ff540e4d43ec69d8de2a7b60e1de2d9ddb406dc",
"options": {},
"module": "upnp",
"id": null
},
"opts": {},
"ip_str": **"126.100.105.198"**
}
现在我想通过过滤参数即 ip_str="126.100.105.198" 和 timestamp="2018-08-11T04:56:17.312039" 从上面的源 json 文件 (extract_3month_fromshodan.json) 中获取另一个新的 json 横幅。 每个 ip_str 和时间戳的迭代值来自单独的 .csv 和/或 .txt 文件。并且输出(过滤后的banner)需要保存为json格式。
到目前为止我做了什么:
jq '. | select (.timestamp="2018-08-11T04:56:17.312039") | select(.ip_str==""12X.10X.XXX.X9X")' extract_3month_fromshodan.json > all.json
通过这种方式,我需要获取将近 290 次的 ip_str,timestamp 值,这些值保存在 csv 和/或 .txt 文件中。我所做的是针对单个 ip_str 和时间戳。但我无法将上述命令作为循环运行。
预期输出:
我应该从主 json 横幅(包含超过 500 个 IP)中提取/过滤 json 横幅,包括所有相关字段 w.r.t 290 IP 和时间戳(保存在 csv 或 txt 文件中)。提取应该自动完成,即像一个/一组代码的循环命令一样。循环的值(时间戳和 ip_str)将来自 .csv 或 .txt 文件。
对于这里的迷你用例(从两个中过滤一个),在输入中,我有两个 IP 的输入横幅,即 126.100.255.229 和 126.100.105.198。现在在运行循环命令之后,我应该得到 ip_str=126.100.105.198 的横幅,其时间戳 = 2018-08-11T04:56:17.312039 如下所示。在实际情况下,我将在我的一个 json 文件中有超过 500 个 IP 和时间戳的横幅,我必须过滤 290 个 IP 和时间戳。
输出:
{
"asn": "AS17676",
"hash": 1371060454,
"ip": 2120509894,
"isp": "Softbank BB",
"transport": "udp",
"data": "HTTP/1.1 200 OK\r\nCache-Control: max-age=1800\r\nST: upnp:rootdevice\r\nUSN: uuid:63041253-1019-2006-1228-00018efed688::upnp:rootdevice\r\nEXT:\r\nServer: OS 1.0 UPnP/1.0 Realtek/V1.3\r\nLocation: http://192.168.2.1:52881/simplecfg.xml\r\n\r\n",
"port": 1900,
"hostnames": [
"softbank126100105198.bbtec.net"
],
"location": {
"city": "Yamashitacho",
"region_code": "18",
"area_code": null,
"longitude": 130.55,
"country_code3": "JPN",
"latitude": 31.58330000000001,
"postal_code": "892-0816",
"dma_code": null,
"country_code": "JP",
"country_name": "Japan"
},
"timestamp": "2018-08-11T04:56:17.312039",
"domains": [
"bbtec.net"
],
"org": "Softbank BB",
"os": null,
"_shodan": {
"crawler": "6ff540e4d43ec69d8de2a7b60e1de2d9ddb406dc",
"options": {},
"module": "upnp",
"id": null
},
"opts": {},
"ip_str": **"126.100.105.198"**
}
实际结果:
通过运行上述代码,我得到了基于过滤器参数(在本例中为 ip_str 和时间戳)的过滤输出/json 横幅,用于单个组合。 jq'。 |选择 (.timestamp="2018-08-11T04:56:17.312039") | select(.ip_str=="126.100.105.198")' extract_3month_fromshodan.json > all.json
实际问题:
但问题是我必须为 IP 手动运行上述代码 290 次,这有些麻烦。那么,我该如何使用这个命令,让它可以自动重复运行其他 290 次。
【问题讨论】:
-
如果您遵循minimal reproducible example 准则,您的问题会更容易理解和回答。
-
喜峰。谢谢你的建议。我已经修改了文本以使其更清晰。为了重现这个案例,我必须在这里上传原始文件,但我不确定这样做是否好!
-
请仔细阅读minimal reproducible example 指南。该示例应该是最小的,但应该包括输入和预期的输出。它应该(在这种情况下)易于验证 - 请不要包含数据图像。谢谢。
-
感谢您的反馈。事实上,要重现一个可验证的案例,我需要在此处添加一个 json 文件,但没有找到任何选项。因此,我再次编辑了内容以使其更易于理解。
-
越来越近了,但输入示例应该是完整的(并且是最小的)。此外,您还没有指定如何指定每个查询中的值。您提到了一个循环,但没有说明每次迭代中的值来自何处。每个查询的结果应该去哪里?