Modifier la valeur ttl d'un controle winsock

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 008 fois - Téléchargée 36 fois

Contenu du snippet

ceci est simplement un exemple pour comprendre comment changer le TTL (Time To Live) d'un controle WINSOCK sous VB.

Source / Exemple :


'creer un form avec un controle WINSOCK

Private Declare Function setsockopt Lib "wsock32" (ByVal WinSockHandle As Integer, ByVal level As Integer, ByVal X As Integer, ByRef AdresseAndInterface As Any, ByVal LenOfAdresseAndInterface As Integer) As Integer

dans le form_load()

If Winsock1.State <> 0 Then Winsock1.Close ' si winsock pas ferme alors ferme le
    With Winsock1
        '.RemoteHost = "192.168.2.255" ' envoi un broadcast
        .RemoteHost = "224.0.0.1"   ' envoi un multicast
        .RemotePort = PortDistant      '41000    ' port distant de connexion.
        .Bind PortLocal                'port d'ecoute de connexion
   End With

'mettre le TTL du Winsock a 2 pour passer les routeurs si il a besoin
Dim TTL As Integer
TTL = 2
'le 10 correspond a IP_MULTICAST_TTL pour changer la valeur du TTL si on fait du multicast
'au lieu de 10 mettre 4 si c'est de l'IP classique non multicast
'cf: MSDN recherche par les mots "WINSOCK TTL"

setsockopt Winsock1.SocketHandle, 0, 10, TTL, Len(TTL)

ce qui est donc important pour changer le TTL d'un WINSOCK c'est 

TTL = 2
setsockopt Winsock1.SocketHandle, 0, 10, TTL, Len(TTL)

dans cet exemple, on met le TTL a 2 pour des trames UDP multicast.

pour des trames IP classisques (non multicast) :

TTL = 2
setsockopt Winsock1.SocketHandle, 0, 4, TTL, Len(TTL)

Conclusion :


j'espere que cela pourra aider quelqu'un.
PS: vous pouvez laisser une note ou un commentaire

A voir également

Ajouter un commentaire

Commentaires

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Ok, un nombre de couche, quoi.
Merci de ces explications :-)
Messages postés
521
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
11 septembre 2008
5
le TTL par defaut avec le winsock de VB est 1 (cf: http://www.vbfrance.com/code.aspx?ID=21621 ou http://www.vbfrance.com/code.aspx?id=22252 )
donc ce multicast ne peut passer aucun routeur car au premier routeur rencontré sa valeur TTL passe a zero (donc ce n'est pas une valeur de temps reel comme celle d'un ping), une fois que ta trame a une valeur de TTL zero elle est considéré comme morte donc pas routé.
le fait de passer un routeur eleve 1 a la valeur TTL de toute trame, ainsi une trame ayant une valeur TTL de 128 pourra en théorie passer 128 routeurs avant d'etre considéré comme morte.
en regle general on fait communiquer deux sites par un routeur a chaque extremité du tuyau donc 2 routeurs, ainsi une valeur de TTL a 3 doit suffir pour faire communiquer deux sites.
si on passe une multitude de routeurs entre deux sites, l'ideal est de faire un tunnel (genre un VPN) ainsi on se retrouve dans le cas precedent ou ue valeur de TTL 3 suffit pour faire communiquer les deux sites.

NB : ATTENTION!! dans le cas de trames broadcast ou multicast les routeurs doivent etre configurés pour laisser passer ce type de trames (pas par defaut) soit tous les routeurs, soit ceux a chaque extremités en cas de tunnel.

la valeur max de TTL est 256.

ah si aussi en cas de multicast (je me suis fais avoir) ne pas utiliser l'adresse 224.0.0.1 elle est reservé mieux vaut 240.XX.XX.XX par exemple.

donc comme tu le vois le TTL du winsock n'est pas une durée de vie en temps reel mais plutot le nombre d'iteration possible de la trame avant sa mort.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut thierrydelepine
La suite logique de tes recherches sur le protocole UDP ?
Si j'ai bien compris les précédents épisodes, un 'jeton' UDP est lancé sur le réseau.
En fonction de l'IP que l'on passe au jeton, celui peut remonter aux couches supérieures des routeurs (multicast ou broadcast).
Ce jeton 'réagit' aux interrogations liées au port de comm (et pas à l'IP), ce qui permet aux clients de contacter le serveur sans connaître son IP (voir ce lien qui est une mise en application de ta précédente source http://www.vbfrance.com/code.aspx?id=22252 )

L'idée de la durée de vie du jeton m'avait échappée.
Juste une question : TTL = Time To Live
Est-ce que cela a un rapport avec le temps de vie du jeton ?
Si oui, que signifient les valeurs passées au TTL ? (secondes, millisecondes) ?
Si non, comment ce terme peut-il agir sur la profondeur de propagation de l'info ?
Quelle est la valeur par défaut du TTL et si c'est lié au temps, combien de temps cette info reste valable.

Merci d'approfondir les explications.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.