이 파일은 여러 줄로 구성되어 있으며 각 줄마다 일부 정보 만 가져오고 싶습니다. 전체 줄은 아닌데 여기에 파일의 모양이 나와 있습니다. 나는 이러한 요소를 추출 할 그것으로부터 있도록파일의 행을 일치시키고 파이썬에서 구문을 분석하십시오.
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] , [도메인 (있는 경우)], [관련된 ips 주소]
웹 사이트의 오래된 항목을 살펴본 후 re.match()가 그렇게하는 데 도움이된다는 것을 알았지 만, 모든 라인은 d 다른의 ifferent, 나는 종류의 도움이 좋을 것, 손실하고, 여기에 내가 지금까지 쓴 코드이며 올바른 :
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])
는 내가 만드는 알고있는 경우이 후 다른 문 때문에 그 다음에 오는 것은 언제나 다르며, 3 가지 경우에 모든 DNS 출력 파일에 일반적으로 표시됩니다.
- A? CNAME, 정확한 도메인 및 IP 주소는 다음과 같습니다.
- PTR? NXDOmain이 뒤 따르는 것은 도메인이 존재하지 않는다는 의미이므로이 줄을 무시합니다.
- TXT? 뒤에 도메인이 있지만 단어 만 제공하므로이 두 단어는 무시합니다.
응답에 IP 주소가 포함되어 있기를 원합니다.이 경우에는 A?
예! 고맙습니다! 그게 더 좋은 생각이 들리는데, 나는 이것을 처리하기 위해 많은 것들을 시도했다. 나는 지금 바보 같다고 생각한다. – Catty
타임 스탬프에 관한 간단한 질문으로, 나는이 코드에서 전에 이것을 시도했다.'time.mktime (datetime.strptime (mu. "% H : % M : % S. % f"). timetuple())'
하지만 작동하지 않았습니다. 제게 시험해 주시겠습니까 – Catty
datetime.datetime.strptime (" 18 : 10 : 12.960404 ","% H : % M : % S. % f ") timetuple() 나를위한 단어. 귀하의 그룹 (1)이 귀하가 생각하는 것과 약간 다른 것을 되돌려 줄 수 있습니까? – user632657