2016-05-12 10 views
-4

Ich versuche, ein Python-Skript auf Linux, die einen 'Whois' Befehl auf jeder verbundenen/verbindenden IP-Adresse, die aus dem 'Netstat' Befehl geparst wird.Python-Linux-Skript (Whois Fehler)

Ich bin eine Fehlermeldung erhalten sagen "sh: 1: Syntaxfehler: Unterminated zitierte Zeichenfolge"

und die Whois Nutzungsmöglichkeiten unter dem geschrieben.

Kann mir jemand erklären, was das Skript falsch ist? Ich glaube, es hat etwas mit der for-Schleife zu tun und mit der Art und Weise, wie es den whois-Befehl ausführt, kann ich einfach keine Lösung finden. Im Folgenden finden Sie das Skript in Frage:

#!/usr/bin/python 
from os import system 

answer = [system("netstat -alpntu46 |grep 'ESTABLISHED\|SYN_RECV' | awk '{print $5 }' |cut -d: -f1'")] 

for i in answer: 
    system('whois') 

EDIT So ist mein ursprüngliches Problem vollständig fixiert, ich bin keine Fehler bekommen. Aber jetzt das ganze Skript tut, ist die IP-Adressen auflisten und darunter, dass sie die whois Verwendungsbeispiele aufgeführt:

-h HOST, --host HOST connect to server HOST 
-p PORT, --port PORT connect to PORT 
-H      hide legal disclaimers 
     --verbose  explain what is being done 
     --help   display this help and exit 
     --version  output version information and exit" 

So scheint es, die Antwort variabel ausgeführt werden, aber nicht in der Lage, den whois-Befehl auf jeder Adresse laufen .

+4

Zählen Sie die ' '' s in der Zeile Code. Eine schnelle Möglichkeit, Ihren Code zu überprüfen, wäre, alles zwischen 'system (' '...' ") zu kopieren und zu versuchen, es manuell in einer Shell auszuführen. –

+0

Danke :) Du hast absolut Recht, ich normalerweise alles innerhalb des Systembefehls in einer tatsächlichen Shell ausführen, muss ich den zusätzlichen Apostroph nach dem – vladimir

Antwort

1

Ihre Befehlszeichenfolge (innerhalb de system() Befehl) hat eine ' mehr als benötigt (am Ende der Zeichenfolge). Hier wird korrigiert:

#!/usr/bin/python 
from os import system 

answer = [system("netstat -alpntu46 |grep 'ESTABLISHED\|SYN_RECV' | awk '{print $5 }' |cut -d: -f1")] 

for i in answer: 
    system('whois') 

EDIT (Ihre zweite Frage):

Wenn Sie for i in answer in Python tun Sie durch alle Elemente in Ihrer Antwort Looping, ist das richtig, aber für jede IP-Adresse Wenn Sie eine Schleife bilden, führen Sie nur einen Befehl 'whois' aus, ohne irgendwelche Parameter zu übergeben. Sie sollten die Parameter auf die Zeichenfolge, wie in hinzufügen:

for i in answer: 
    system('whois %s' % i) 

, der die Variable i hält die IP-String annimmt.

+0

vertippt haben Wow danke, nicht sicher, wie das extra Apostroph bekam hah. – vladimir

0

Bitte überprüfen Sie die Bearbeitung auf meine erste Antwort (dieses Posting nur damit Sie benachrichtigt werden.)

+1

Vielen Dank Lucas. Ich liebe diese Community sehr, ich habe mehr über Stackoverflow/Stackexchange gelernt als einige meiner College-Kurse lol – vladimir