Read TTL from an ICMP message received via Python raw sockets -
i'm building traceroute-ish tool determine number of hops required udp packet reach address using 1 probe. this, want extract ttl icmp message receive after sending probe. i'm doing following , receiving icmp message:
data, source = in_socket.recvfrom(d_bufsize) but have no idea how turn data can read ttl from. in_socket declared this:
in_socket = socket.socket(socket.af_inet, socket.sock_raw, icmp_proto) here, icmp_proto protocol number icmp (obtained doing icmp_proto = socket.getprotobyname("icmp")).
any appreciated!
but have no idea how turn
datacan read ttl from.
pyping way:
def header2dict(self, names, struct_format, data): """ unpack raw received ip , icmp header informations dict """ unpacked_data = struct.unpack(struct_format, data) return dict(zip(names, unpacked_data)) … packet_data, address = current_socket.recvfrom(icmp_max_recv) icmp_header = self.header2dict( names=[ "type", "code", "checksum", "packet_id", "seq_number" ], struct_format="!bbhhh", data=packet_data[20:28] ) if icmp_header["packet_id"] == self.own_id: # our packet ip_header = self.header2dict( names=[ "version", "type", "length", "id", "flags", "ttl", "protocol", "checksum", "src_ip", "dest_ip" ], struct_format="!bbhhhbbhii", data=packet_data[:20] ) packet_size = len(packet_data) - 28 ip = socket.inet_ntoa(struct.pack("!i", ip_header["src_ip"])) the ttl can read ip_header["ttl"].
Comments
Post a Comment