如何使用Python从系统日志文件中获取DST地址

如何使用Python从系统日志文件中获取DST地址,python,parsing,Python,Parsing,所以,我有一个家庭路由器生成的日志文件。它有数百行。每一行都是这样的:(下面的长线)。我想解析这个文件以获得所有的“DST”地址。例如,从下面的行中,DST地址是“16.99.99.102” 使用Python实现这一点的最佳方法是什么? 最后,我想通过iplookup查询来运行这些DST ip地址,以获得域名 我的理想脚本是将时间戳放在开头,SRC地址和DST地址——所有这些,分别放在一个字典中,字典的键是“SRC”ip地址,对应的值是一个包含DST地址和时间戳的列表 我不一定要寻找一个优雅的脚

所以,我有一个家庭路由器生成的日志文件。它有数百行。每一行都是这样的:(下面的长线)。我想解析这个文件以获得所有的“DST”地址。例如,从下面的行中,DST地址是“16.99.99.102”

  • 使用Python实现这一点的最佳方法是什么? 最后,我想通过iplookup查询来运行这些DST ip地址,以获得域名

  • 我的理想脚本是将时间戳放在开头,SRC地址和DST地址——所有这些,分别放在一个字典中,字典的键是“SRC”ip地址,对应的值是一个包含DST地址和时间戳的列表

  • 我不一定要寻找一个优雅的脚本,但一些作品


    (1)的解决方案已经足够好了,但(2)的解决方案将是一个奖励

    这对你有用吗:

    In [30]: somestr = "Dec 10 16:02:02 ? user.warn kernel: DROP IN=br0 OUT=vlan1 SRC=192.168.1.127 DST=16.99.99.102 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=24724 DF PROTO=TCP SPT=62694 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)"
    
    In [31]: somestr.split()
    Out[31]: 
    ['Dec',
     '10',
     '16:02:02',
     '?',
     'user.warn',
     'kernel:',
     'DROP',
     'IN=br0',
     'OUT=vlan1',
     'SRC=192.168.1.127',
     'DST=16.99.99.102',
     'LEN=52',
     'TOS=0x00',
     'PREC=0x00',
     'TTL=127',
     'ID=24724',
     'DF',
     'PROTO=TCP',
     'SPT=62694',
     'DPT=443',
     'WINDOW=8192',
     'RES=0x00',
     'SYN',
     'URGP=0',
     'OPT',
     '(020405B40103030201010402)']
    
    In [32]: [i for i in somestr.split() if i.startswith("DST")][0].partition('=')[-1]
    Out[32]: '16.99.99.102'
    
    对于备选方案A: 如果所有行的格式(和顺序)相同,则可以为每行添加子字符串:

    dst=line[line.find(“dst=”)+len(“dst=”):line.find(“len=”)]

    对于选项B,您可以在循环中遵循相同的想法:

    D = {}
    for line in lines:
        dst = line[line.find("DST=")+len("DST="):line.find("LEN=")]
        src = line[line.find("SRC=")+len("SRC="):line.find("DST=")]
        ts = line[:line.find("?")]
    
        D[src] = (dst,ts)
    

    您还可能希望
    strip()
    结果字符串以获得更清晰的结果。

    我将使用正则表达式来实现此目的

    差不多

    >>> xxy = "Dec 10 16:02:02 ? user.warn kernel: DROP IN=br0 OUT=vlan1 SRC=192.168.1.127 DST=16.99.99.102 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=24724 DF PROTO=TCP SPT=62694 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)"
    >>> re.findall("^([^?]*).*DST=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)",xxy)
    [('Dec 10 16:02:02 ', '16.99.99.102')]
    
    >>> xxy = "Dec 10 16:02:02 ? user.warn kernel: DROP IN=br0 OUT=vlan1 SRC=192.168.1.127 DST=16.99.99.102 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=24724 DF PROTO=TCP SPT=62694 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)"
    >>> re.findall("^([^?]*).*DST=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)",xxy)
    [('Dec 10 16:02:02 ', '16.99.99.102')]