2016-12-18 13 views
0

Ich versuche, Reverse Lookup der IP-Adresse (Argument) zu überprüfen. und dann schreibe das Ergebnis in die txt-Datei. Wie kann ich überprüfen, ob die IP-Adresse (Argument) bereits in der Datei registriert ist? Wenn ja, muss ich das Skript verlassen.Überprüfen Sie, ob das Befehlszeilenargument bereits verwendet wird

Mein Skript:

import sys, os, re, shlex, urllib, subprocess 

cmd = 'dig -x %s @192.1.1.1' % sys.argv[1] 

proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE) 
out, err = proc.communicate() 

# Convert to list of str lines 
out = out.decode().split('\n') 

# Only write the line containing "PTR" 
with open("/tmp/test.txt", "w") as f: 
for line in out: 
    if "PTR" in line: 
     f.write(line) 
+0

Was meinst du mit "in der Datei registriert"? – 2ps

+0

@ 2ps: Ich denke OP bedeutet, dass die IP in der Datei vorhanden ist, auf der er den Inhalt schreibt –

+0

Das Skript schreibt das Dig-Ergebnis in die TXT-Datei. Ich möchte überprüfen, ob das Argument IP in das Protokoll geschrieben wird. Wenn ja, muss ich das Skript verlassen – OmZ

Antwort

0

Etwas wie:

otherIps = [line.strip() for line in open("<path to ipFile>", 'r')] 
theIp = "192.168.1.1" 
if theIp in otherIps: 
    sys.exit(0) 

otherIps enthält eine list der IP-Adressen auf ipFile, dann müssen Sie prüfen, ob theIp bereits auf otherIps, wenn ja, Verlasse das Skript.

1

Wenn die Datei nicht zu groß ist, könnten Sie tun:

with open('file.txt','r') as f: 
    content = f.read() 
if ip in content: 
    sys.exit(0) 

Nun, wenn die Datei groß ist, und Sie möchten, um mögliche Speicherprobleme vermeiden Sie mmap wie so verwenden:

import mmap 
with open("file.txt", "r+b") as f: 
    # memory-map the file, size 0 means whole file 
    mm = mmap.mmap(f.fileno(), 0) 
    if mm.find(ip) != -1: 
     sys.exit(0) 

Die mmap.find(string[, start[, end]]) ist gut dokumentiert here.

Verwandte Themen