Определить ОС удаленной машины с помощью пингов - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь выяснить, как найти операционную систему, на которой работает удаленный компьютер, с помощью метода ping.

Я не знаю, как получить номер TTL и посмотреть список, чтобы выяснить, чтоОС, которую он использует.

ping 19.217.64.1
Pinging 19.217.64.1 with 32 bytes of data:
Reply from 19.217.64.1: bytes=32 time=3ms TTL=254
Reply from 19.217.64.1: bytes=32 time=3ms TTL=254
Reply from 19.217.64.1: bytes=32 time=5ms TTL=254
Reply from 19.217.64.1: bytes=32 time=4ms TTL=254

Ping statistics for 19.217.64.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 3ms, Maximum = 5ms, Average = 3ms

1 Ответ

0 голосов
/ 21 ноября 2018

Здесь есть реализация ping в python:

https://gist.github.com/chidea/955cea841e5c76a7e5ee8aa02234409d

Посмотрите на функцию receive_ping.TTL является 9-м байтом принятого пакета (индекс 8).Поэтому я печатаю TTL в этой функции:

def receive_ping(my_socket, packet_id, time_sent, timeout):
# Receive the ping from the socket.
time_left = timeout
while True:
    started_select = time.time()
    ready = select.select([my_socket], [], [], time_left)
    how_long_in_select = time.time() - started_select
    if ready[0] == []: # Timeout
        return
    time_received = time.time()
    rec_packet, addr = my_socket.recvfrom(1024)
    print ("TTL:", rec_packet[8]) # IT PRINT THE TTL! HAVE A NICE DAY :)
    icmp_header = rec_packet[20:28]
    type, code, checksum, p_id, sequence = struct.unpack(
        'bbHHh', icmp_header)
    if p_id == packet_id:
        return time_received - time_sent
    time_left -= time_received - time_sent
    if time_left <= 0:
        return
...