Bonjour,
Je souhaiterai savoir comment modifier le TTL (Time to live) d'une requete broadcast envoyé en UDP, pour le moment le TTL est à 64 et je voudrai le passer à 32.
Merci d'avance pour vos réponses.
Version imprimable
Bonjour,
Je souhaiterai savoir comment modifier le TTL (Time to live) d'une requete broadcast envoyé en UDP, pour le moment le TTL est à 64 et je voudrai le passer à 32.
Merci d'avance pour vos réponses.
Tu peut essayer le module externe présent dans la logitèque de Linux: pyip qui implémente une fonctionnalitée pour céer des paquets UDP.
Mais il faut télécharger le code source du module pour comprendre le module n'ayant pas de docstring préçisesCode:
1
2
3 import udp udp.Packet(sport=0, dport=0, ulen=8, sum=0, data='')
Bon python a toi.Code:apt-get source pyip
Salut Luke spywoker,
Je viens de regarder les sources du module udp, et je ne vois pas comment
modifier le TTL, je n'ai trouver ce paramètre seulement dans le module ip.
J'étais pas sur a 100 % qu'un paquet UDP n'est pas en capsuler dans un paquet IP mais c'est le cas et avec scapy tu peut voir qu'un paquet UDP n'a pas de champs ttl mais le paquet IP oui:
Bon python a toi.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 >>>ls(IP) version : BitField = (4) ihl : BitField = (None) tos : XByteField = (0) len : ShortField = (None) id : ShortField = (1) flags : FlagsField = (0) frag : BitField = (0) ttl : ByteField = (64) proto : ByteEnumField = (0) chksum : XShortField = (None) src : Emph = (None) dst : Emph = ('127.0.0.1') options : IPoptionsField = ('') >>> ls(UDP) sport : ShortEnumField = (53) dport : ShortEnumField = (53) len : ShortField = (None) chksum : XShortField >>> a=IP() >>> a.ttl=8 >>> ls(a) version : BitField = 4 (4) ihl : BitField = None (None) tos : XByteField = 0 (0) len : ShortField = None (None) id : ShortField = 1 (1) flags : FlagsField = 0 (0) frag : BitField = 0 (0) ttl : ByteField = 8 (64) proto : ByteEnumField = 0 (0) chksum : XShortField = None (None) src : Emph = '127.0.0.1' (None) dst : Emph = '127.0.0.1' ('127.0.0.1') options : IPoptionsField = '' ('') >>> b=UDP() >>> c=a/b # Le / sert a encapsuler == c=IP()/UDP() >>> c <IP frag=0 ttl=8 proto=udp |<UDP |>> >>> ls(c) version : BitField = 4 (4) ihl : BitField = None (None) tos : XByteField = 0 (0) len : ShortField = None (None) id : ShortField = 1 (1) flags : FlagsField = 0 (0) frag : BitField = 0 (0) ttl : ByteField = 8 (64) proto : ByteEnumField = 17 (0) chksum : XShortField = None (None) src : Emph = '127.0.0.1' (None) dst : Emph = '127.0.0.1' ('127.0.0.1') options : IPoptionsField = '' ('') -- sport : ShortEnumField = 53 (53) dport : ShortEnumField = 53 (53) len : ShortField = None (None) chksum : XShortField = None (None) >>>c.ttl 8
Salut,
UDP et TCP sont des protocoles "transport" au dessus de IP¨qui est "réseau".
La différence peut paraître subtile mais le "transport" est "la" couche "de base" qui permet à source et destination d'échanger des "informations" alors que "réseau" se contente de les acheminer.
_On intuite_ que le time-to-live est une information "réseau": sa valeur fixe le nombre de routeurs le datagramme pourra traverser avant d'être ignoré (plutôt que poussé vers la destination.) et il sera décrémenté à la traversée de chaque routeur...
Il est (donc) possible de créer des packet UDP/IP (comme des packets TCP/IP) en précisant le TTL.
Après la question est "comment on fait"?
On parle de la stack IP et cette chose est imbriquée dans l'OS avec une interface "socket"... Et UNIX man pages nous raconte
Je conviens que l'API socket niveau IP est raide... surtout depuis le codeur Python... Mais nous avons une belle blibliothèque SCAPY qui arrange très bien les choses et qui n'est pas si mal documentée
- W
Merci a vous deux pour vos réponse,
j'essaie dès que j'ai cinq minutes et je vous tiens au courant
@+
RE,
En fait je viens de ressayer, et je viens de trouver la solution,
Merci, à vous deux qui m'avez aiguillé pour trouver la solution.Code:
1
2
3
4
5 ..... connexion=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #Crée le socket UDP connexion.setsockopt(socket.SOL_IP, socket.IP_TTL, 32) #Voici la ligne que j'ai rajouté, cette option modifie la valeur du TTL (32 dans ce cas) ......