【发布时间】:2014-09-02 06:33:04
【问题描述】:
我有这个文件有不同的行,我只想从每一行中获取一些信息(而不是全部)这里是文件外观的示例:
18:10:12.960404 IP 132.227.127.62.12017 > 134.157.0.129.53: 28192+ A? safebrowsing-cache.google.com. (47)
18:10:12.961114 IP 134.157.0.129.53 > 132.227.127.62.12017: 28192 12/4/4 CNAME safebrowsing.cache.l.google.com., A 173.194.40.102, A 173.194.40.103, A 173.194.40.104, A 173.194.40.105, A 173.194.40.110, A 173.194.40.96, A 173.194.40.97, A 173.194.40.98, A 173.194.40.99, A 173.194.40.100, A 173.194.40.101 (394)
18:13:46.206371 IP 132.227.127.62.49296 > 134.157.0.129.53: 47153+ PTR? b._dns-sd._udp.upmc.fr. (40)
18:13:46.206871 IP 134.157.0.129.53 > 132.227.127.62.49296: 47153 NXDomain* 0/1/0 (101)
18:28:57.253746 IP 132.227.127.62.54232 > 134.157.0.129.53: 52694+ TXT? time.apple.com. (32)
18:28:57.254647 IP 134.157.0.129.53 > 132.227.127.62.54232: 52694 1/8/8 TXT "ntp minpoll 9 maxpoll 12 iburst" (381)
.......
.......
它实际上是一个 DNS 请求的输出,所以我想从中提取这些元素: [时间戳]、[srcip]、[src prt]、[dst ip]、[dst prt]、[domaine(如果存在)]、[相关ips地址]
在查看网站的旧主题后,我发现 re.match() 是一种很棒且有用的方法,但是由于您看到每一行都不同,所以我有点迷茫,有些帮助会很棒,这是我到目前为止写的代码,它是正确的:
def extractDNS(filename):
objList = []
obj = {}
with open(filename) as fi:
for line in fi:
line = line.lower().strip()
#18:09:29.960404
m = re.match("(\d+):(\d+):(\d+.\d+)",line)
if m:
obj = {} #New object detected
hou = int(m.group(1))
min = int(m.group(2))
sec = float(m.group(3))
obj["time"] = (hou*3600)+(min*60)+sec
objList.append(obj)
#IP 134.157.0.129.53
m=re.match("IP\s+(\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}).(\d+)",bb)
if m:
obj["dnssrcip"] = m.group(1)
obj["dnssrcport"] = m.group(2)
# > 134.157.0.129.53:
m = re.match("\s+>\s+(\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}).(\d+):",line)
if m:
obj["dnsdstip"] = m.group(1)
obj["dnsdstport"] = m.group(2)
tstFile3=open("outputFile","w+")
tstFile3.write("%s\n" %objList)
tstFile3.close()
extractDNS(sys.argv[1])
我知道我必须在此之后做出 if else 语句,因为它们之后的内容每次都不同,我在 3 种情况下展示了我在每个 dns 输出文件中得到的一般情况,它们是:
- 一个?后跟 CNAME、确切的域和 IP 地址,
- PTR?后跟一个 NXDOmain,表示该域不存在,所以我将忽略这一行,
- TXT?后跟一个域,但它只给出单词,所以我将忽略这两个
我只想要他们的响应包含 IP 地址的请求,在这种情况下是 A?
【问题讨论】: