2013121
pour
UdpSwitchPython
20131230: GAFFE: Nouveauté: possibilité de spécifier une attente en secondes avant la réponse
ce test vérifie la possibilité
- pour une machine d'un réseau local,
- sans ouverture de port entrant sur le modem/routeur ou box
- envoyer un paquet Udp à une machine située n'importe où sur Internet
- recevoir la réponse.
- il est possible d'imposer un délai au serveur avant qu'il ne réponde.
exposé du problème:
- le paquet est émis depuis une adresse non routable, genre, 192.168.xxx.zzz
- la Box/routeur remplace cette adresse par son adresse Wan et plus rien dans le paquet ne mentionne l'adresse d'origine
- RIEN non plus dans un paquet de "réponse" ne signale la machine interne destinataire
- cette page vise à vérifier dans quelle mesure un paquet arrivant du même port de la machine du paquet "sortant" est dirigé vers l'adresse interne non routable ci dessus
sauf incident un serveur tourne à flavigny.hd.free.fr:7777
merci d'essayer le programme chkudp.py ci dessous
pour info, le code en exécution sur le serveur se trouve plus bas.
avec délai, à tester:
- selon la durée du délai
- en cas de reboot de la box
- n cas de débranchement du câble.
- en cas de reboot de l'ordinateur
feuille de route pour le visiteur:
chkudp.py (à exécuter sur un "client", dans un réseau local, derrière une Box, SANS règle Nat/Pat pour le port utilisé (ici 7777)
vous pouvez
prochainement télécharger le fichier directement:
http://udpswitch.logsm.net/chkudp.py
chkupd.py
import sys, socket, datetime
# envoie unpaquet UDP au port designe d'une adresse WAN et attend une reponse
if len(sys.argv)<4 :
print "appel: sudo python "+sys.argv[0]+ " ip/nom_mirroir port_mirroir mot [ mots ...] "
print "l'echo revient en verlan"
sys.exit()
switch=sys.argv[1]
port=int(sys.argv[2])
ip=3
text=""
while ip<len(sys.argv):
text=text + " " + sys.argv[ip]
ip=ip+1
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('',port))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
print datetime.datetime.now(),'"', text,'" sent to: ' ,switch,":",port
sock.sendto(text, (switch, port))
print "Wait for answer on port:",port," (hit ^C to exit)\n"
while 1:
(buf, address)=sock.recvfrom(2048)
if not len(buf):
break
print datetime.datetime.now(),"from IP: " , address, " answer:",buf
break
leprogramme serveur:
UdpSwitchPythonTestARServeur
traces du éveloppement:
vielleries:
réponse à paquet UDP
répone à paquet Tcp