Seite 1 von 1

Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 11:03
von Kamik423
Ich versuche einen kleinen Chat Server-Client zu basteln. Das ist aller Code den ich bisher habe:

Code: Alles auswählen

#Server
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
prt = int(input('PORT: '))
s.bind(('', prt))
#s.bind((socket.gethostbyname(socket.gethostname()), prt))
print('Hosted at ' + str(s.getsockname()))
s.listen(2)
while 1:
    cli_sock, cli_addr = s.accept()
    print('New connection: ' + str(cli_addr))
    cli_sock.send('TEST to ' + str(cli_addr))

Code: Alles auswählen

#Client
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(),int(input('Client Port: '))))
s.connect((input('IP: '),int(input('SRVR Port: '))))
print(s.recv(4096))
Ich habe meinen Router (Speedport W 504V) auf eine Postweiterleitung programmiert
Bild
Es funktioniert problemlos auf meinem lokalen Netzwerk, aber sobald ich von meinem Client die (externe) IP unseres Routers und den Port eingebe bekomme ich timeout. Mein Windows Freund bekommt folgenden Fehler:

Code: Alles auswählen

 line 4, in <module>
    s.connect((input('IP: '),int(input('SRVR Port: '))))
OSError: [WinError 10051] Ein Socketvorgang bezog sich auf ein nicht verfügbares Netzwerk
telnet auf meinem Computer sagt:

Code: Alles auswählen

telnet: connect to address XX.XXX.XX.X: Operation timed out
telnet: Unable to connect to remote host
(Mir wurde empfohlen ich soll telnet zum verbindungsfesten verwenden)
Mir ist folgende Diskrepanz aufgefallen: Links die Info meines routers, rechts mein Programm
Bild
Ich habe verschiedene IPs für den server verwendet: '', '0.0.0.0', socket.gethostbyname(socket.gethostname()), socket.gethostname(), meine Lokale und meine Globale IP Adresse (refused)

Was mache ich falsch?

Re: Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 11:40
von __deets__
So wie ich deine Programmsnippets verstehe, machst du den Port eingebbar, obwohl genau der konstant sein muesste (denn du hast ja nur eine Portforwarding-Regel), aber die IP ist hart verdrahtet.

Das muss in meinen Augen umgekehrt sein. Der server kann so bleiben, weil er an alle interfaces bindet, also auch die IP fuer die du das forwarding eingerichtet hast.

Der client hingegen muss per Eingabe die IP deines Routers von aussen erhalten.

Re: Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 11:48
von Kamik423
Wie ist das genau gemeint?
Der Server fragt nach einem Port. Zur zeit verwende ich dafür 24117, weil ich den geforwarded habe, aber ich möchte auch einen anderen beliebig eingeben können

Der Client fragt auch nach eine Port, den ich binde. (Für ausgehende Nachrichten, so wie ich es verstehe, und der muss nicht geforwarded sein, oder?)
Dann nach der Server IP, die ich eingebe
und dann nach dem Port des servers, also 24117

Re: Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 11:49
von Sirius3
@ Kamik423: das bind beim Client ist unnötig. Der bekommt automatisch einen freien Port. Statt send möchtest Du wahrscheinlich sendall verwenden und das recv wird hoffentlich noch durch ein ordentliches Protokoll ersetzt. Beim Port-Weiterleiden muß nicht nur Dein Router sondern auch Dein Provider mitspielen. Hast Du da schon geschaut, wie man es einrichten muß? Hast Du schon mal andere Programme von außen angesprochen?

Re: Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 12:01
von Kamik423
@Sirius3: Die Tutorials die ich gesehen habe machen auch "bind" beim Client, wenn ich es entferne bekomme ich immer noch den timeout.
Das Programm soll erst einmal nur eine Verbindung aufbauen, am Kommunikationsprotokoll arbeite ich später... Aber trotzdem schon einmal vielen Dank
Daran kann es aber noch nicht liegen, denn bevor das erste send oder recieve stattfindet soll er erst einmal was printen. Aber bis dahin kommt es nicht ein mal. Es scheitert schon am connect / listen / accept
Ich glaube mein Provider ist T..Home... (mein Router Speedport W 504V von Telekom), wie mache ich, dass die "mitspielen"?
http://www.yougetsignal.com/tools/open-ports/ sagt mein port wäre "closed" also liegt es wahrscheinlich daran.
Nein, das ist das erste mal, dass ich so ein Netzwerk versuche. Ich habe nur schon einem mit FTP mit einem anderen Server "gesprochen"
Vielen Dank

Re: Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 12:06
von __deets__
Ah, ich bin verwirrt worden von dem code. Dein client hat ein voellig nutzloses (oder eher schaedliches) `s.bind` vor dem `s.connect(...)` in dem du die IP abfragst. Das solltest du entfernen, das hat da nix zu suchen. Vielleicht hilft das schon, glaube ich aber nicht - denn telnet hat das sicher nicht so gemacht.

Mit

Code: Alles auswählen

 lsof -iTCP -sTCP:LISTEN -n -P
solltest du bei laufendem server sicherstellen, das er auf allen Adressen lauscht. Da sollte getsockname auch eine '0.0.0.0' ausliefern.

Re: Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 12:09
von Kamik423
Ja, das bind ist schon entfernt.

Code: Alles auswählen

hansSeiMac:~ Hans$ lsof -iTCP -sTCP:LISTEN -n -P
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Dropbox  612 Hans   26u  IPv4 0xdf0443ea02c0dc2f      0t0  TCP *:17500 (LISTEN)
Dropbox  612 Hans   38u  IPv4 0xdf0443ea027076cf      0t0  TCP 127.0.0.1:17600 (LISTEN)
Dropbox  612 Hans   44u  IPv4 0xdf0443ea0262e34f      0t0  TCP 127.0.0.1:17603 (LISTEN)
Python  4142 Hans   16u  IPv4 0xdf0443ea04b1c6cf      0t0  TCP 127.0.0.1:65357 (LISTEN)
Skype   4323 Hans   43u  IPv4 0xdf0443e9f34e018f      0t0  TCP 192.168.2.109:57867 (LISTEN)
Python  5534 Hans    3u  IPv4 0xdf0443ea04b3c50f      0t0  TCP *:24117 (LISTEN)
Das untere Python ist so ok?

Re: Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 12:15
von Sirius3
@Kamik423: ja, auf der Pythonseite ist jetzt soweit alles in Ordnung. Zum Thema Routerkonfiguration gibt es schon etliche Tutorials im Netz. Ich gehe da immer nach dem Prinzip vor, alle Varianten durchprobieren, bis es funktioniert.

Re: Port Weiterleitung funktioniert nicht

Verfasst: Sonntag 25. Oktober 2015, 12:16
von Kamik423
Ja, das habe ich gestern von 12-24 Uhr gemacht...
Aber ich schaue noch einmal
Vielen Dank