Seite 1 von 1

UDP socket: "No route to host"

Verfasst: Donnerstag 22. Januar 2009, 23:50
von el_bobo
Hallo zusammen,

ich spiele gerade ein wenig mit UDP Hole Punching und bekomme seltsamerweise immer wieder einen "No route to host" Fehler.

Zuerst der Code:

Code: Alles auswählen

#!/usr/bin/env python

import sys
import socket
import time


def send_udp(sock, delay):
    print ('delay: ' + str(delay) + ' sec.').ljust(18),
    for i in range(10):
        try:
            tmp = sock.send('my teststring')
            sys.stdout.write('.'); sys.stdout.flush()
        except socket.error, e:
            if e[1] == 'No route to host':
                sys.stdout.write('!'); sys.stdout.flush()
        time.sleep(delay)
    print ''


sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((socket.gethostname(), 50123))
sock.connect(('72.14.221.104', 50456))     # google.de
#sock.connect(('private ip', 50456))

print ''

send_udp(sock, 0)
send_udp(sock, 0.5)
send_udp(sock, 1)
send_udp(sock, 1.5)
Zu google.de sieht das aus wie erwartet:
google.de hat geschrieben: delay: 0 sec. ..........
delay: 0.5 sec. ..........
delay: 1 sec. ..........
delay: 1.5 sec. ..........
Zu einer privaten IP hingegen geht da dann aber etwas schief:
private ip hat geschrieben: delay: 0 sec. ..........
delay: 0.5 sec. .!.!.!.!.!
delay: 1 sec. .!.!.!.!.!
delay: 1.5 sec. .!.!.!.!.!
Woran kann das denn liegen? Die Gegenseite ist eine Fritzbox.

Mir ist schon klar, dass das eher ein Netzwerkproblem ist, aber vielleicht kann mir hier ja jemand helfen.

Fragen? => Ganz laut schreien! : - )

Vielen dank schon mal und schöne Grüße,
el_bobo

Verfasst: Freitag 23. Januar 2009, 12:31
von ms4py
UDP + connect scheint mir nicht so ganz korrekt zu sein.
Versuch mal mit sendto und ohne connect

http://www.evolt.org/article/Socket_Pro ... /17/60276/

Verfasst: Freitag 23. Januar 2009, 17:23
von el_bobo
Naja, also zu anderen Hosts funktioniert es auch.

Schon klar, dass UDP stateless ist, aber ich vermute bei UDP ist connect() dann einfach ein alias für sendto() mit dem Unterschied, dass er sich eben den Adressaten merkt. Das habe ich aber nicht überprüft.

Ich bin eher der Meinung dass die Fritzbox da den Fehler zurück gibt.

Gruß.

Verfasst: Montag 26. Januar 2009, 19:45
von el_bobo
Falls es noch jemanden interessiert:

Die Fritzbox macht sehr unfreundliches NAT und mappt in der Regel interne Ports (linear) auf fünfstellige externe Ports.

Schickt man nun UDP Pakete an extern geschlossene Ports, so scheint die Box manchmal nichts und manchmal "no route to host" zu antworten.

Gruß.