IP-Adresse wird nicht angezeigt

Code-Stücke können hier veröffentlicht werden.
Antworten
michaelc
User
Beiträge: 7
Registriert: Sonntag 22. Mai 2016, 09:42

Moin leute, hab versucht das Script tor-buddy von bash in python zu übersetzen und hab einige änderungen vorgenommen.
Nun zu meinem Problem, ich möchte ,dass nach jedem restart von dem tor-service die aktuelle IP angezeigt wird, mir wird aber nur die ursprüngliche IP präsentiert.

Code: Alles auswählen

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'

    def disable(self):
        self.HEADER = ''
        self.OKBLUE = ''
        self.OKGREEN = ''
        self.WARNING = ''
        self.FAIL = ''
        self.ENDC = ''


import os
import signal
import sys
import time

from json import load
from urllib2 import urlopen


my_ip = load(urlopen('https://api.ipify.org/?format=json'))['ip']

path = "/etc/init.d/tor"
patha = "/etc/init.d/anonsurf"
pathb = "/etc/proxychains.conf"
#ipaddr = os.system('wget http://ipinfo.io/ip -qO -')

print ""
print "####################################"
print "#      TOR-Buddy(Python version)          #"
print "####################################"
print "# Nilssen Ramanathan Techsoft Inc. #"
print "#     code by Michael Cichosz      #"
print "####################################"
print "credits: idea from Tor-Buddy by AfterBurn @ NetSecNow"
print "recode in python by Michael Cichosz"
print ""
print ""
print "checking for anonsurf..."

if os.path.exists(patha):
    print(bcolors.OKGREEN + "%s exists!" % (patha) + bcolors.ENDC)
else:
  print(bcolors.FAIL + "%s not found!" % (patha) + bcolors.ENDC)
os.system('anonsurf start')
print ""


print "checking for TOR..."

if os.path.exists(path):
    print(bcolors.OKGREEN + "%s exists!" % (path) + bcolors.ENDC)
else:
  print(bcolors.FAIL + "%s not found!" % (path) + bcolors.ENDC)

os.system('service tor start')
print ""
print "checking for proxychains"
if os.path.isfile(pathb):
    print(bcolors.OKGREEN + "%s exists!" % (pathb) + bcolors.ENDC)

else:
 print(bcolors.FAIL + "%s not found!" % (pathb)+ bcolors.ENDC)
print ""
x = input("Please enter how many seconds you want to grab a new IP: ")
print (x),"Seconds IP will be changed"

from twisted.internet import task
from twisted.internet import reactor

timeout = x # x seconds

def doWork():
    os.system('service tor restart')
    pass
l = task.LoopingCall(doWork)
l.start(timeout) # call every x seconds
time.sleep(5)
print "Your current public IP:",my_ip
reactor.run()


terminate = False                           

def signal_handling(signum,frame):          
    global terminate                        
    terminate = True                        

signal.signal(signal.SIGINT,signal_handling)
x=1                                         
while True:                                 
    print "Press Control+C to exit script"
    time.sleep(5)                           
    x+=1                                    
    if terminate:                           
        os.system('anonsurf stop')                
        break                               
time.sleep(5)
print "Thanks for using my Script"
print "Your current public IP:",my_ip    
hier nochmal der original bashcode:
https://sourceforge.net/projects/linuxs ... Tor-Buddy/

danke
gruss micha :)
Zuletzt geändert von Anonymous am Donnerstag 3. November 2016, 20:31, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@michaelc: Dann musst du halt auch nach jedem Neustart die IP ermitteln. Und ausgeben.

Importe gehören an den Anfang eines Moduls, damit man die Abhängigkeiten leicht sehen kann und sehen kann wo welcher Name her kommt.

`twisted` ist ja wohl eine ziemliche Kanone mit der Du hier auf Spatzen schiesst, zumal das so auch gar nicht funktioniert wie Du Dir das vorstellst. Die `reactor.run()-Methode ist blockierend. In Zeile 86 bleibt das also erst einmal hängen und arbeitet die Twisted-Hauptschleife ab, solange bis die verlassen wird. Da sehe ich eigentlich erst einmal nur ein <Ctrl>+<C> was das bewirkt. Und dann kommt erst Deine zweite Schleife die dem Benutzer alle fünf Sekunden sagt, dass er die Tastenkombination *noch mal* drücken muss, um es *wirklich* zu beenden. Das erscheint mir sinnlos.

Die Klasse am Anfang ist keine Klasse und echt gruselig.

`path`, `patha`, und `pathb` sind schlechte Namen. Was sind das für Pfade? Was bedeuten die? *Das* sollte man am Namen ablesen können.

``print`` ist in Python 2 keine Funktion sondern eine Answeisung. Also schreib keine Klammern um Funktionsargumente die gar keine sind. Wenn da mehr als ein ”Funktionsargument” steht, dann verhält sich das mit Klammern auch nicht so wie Du das willst, denn dann sind die Klammern nicht einfach nur überflüssig, sondern sorgen auch dafür das man nicht mehrere Argumente hat, sondern *ein* *Tupel*.

Die Python-Laufzeitumgebung kümmert sich bereits um das SIGINT-Signal und wandelt das in eine `KeyboardInterrupt`-Ausnahme um, die man ganz normal mit ``try/``except`` behandeln kann. Und mit einem ``finally`` kann man dann zusätzlich sicherstellen, das Aufräumarbeiten am Ende auch durchgeführt werden wenn das Programm auf andere Weise am Ende angelangt.

Statt `os.system()` sollte man die passende Funktion aus dem `subprocess`-Modul verwenden.

Von `input()` sollte man in Python 2 die Finger lassen. Da kann der Benutzer beliebige Python-Ausdrücke eingeben, die dann *ausgeführt* werden. Nimm `raw_input()` und wandele die Eingabe explizit in den Datentyp um den Du brauchst. Und dann kannst Du das Ergebnis auch gleich `timeout` zuweisen statt erst `x` und das dann `timeout`. Und danach verwendest Du `x` für etwas anderes. Wobei verwenden auch ein wenig zu viel gesagt ist, denn es wird zwar laufend verändert, aber der Wert wird für nichts verwendet. Wech damit.

``pass`` macht keinen Sinn wenn es nicht die einzige Anweisung in einem Block ist. Auch wech.

`l` ist schlechter Name. Nicht nur nichtssagend, sondern in vielen Schriftarten auch leicht mit `1` und/oder `I` zu verwechseln.

Es gibt einen Haufen Codewiederholungen in dem Quelltext wo nur marginale Unterschiede sind, die man leicht als Parameter für eine Funktion herausziehen kann.

Überhaupt sollte man das mal sinnvoll auf Funktionen aufteilen und nicht alles wie ein Shellskript auf Modulebene runterscheiben. Dort gehört nur Code hin der Konstanten, Funktionen, und Klassen definiert.

`sys` wird importiert aber nirgends verwendet.
Antworten