1. Python / Говнокод #28503

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    #!/usr/bin/env python3
    
    import sys
    import socket
    
    
    def main():
        if len(sys.argv) != 2:
            print("Программа ожидает 1 аргумент: доменное имя хоста")
            return 1
    
        # Input.
    
        host_name = sys.argv[1]
        print(f"Доменное имя хоста: {host_name}")
    
        host_ip = socket.gethostbyname(host_name)
        print(f"IP-адрес хоста: {host_ip}")
    
        host_port = 33433
        timeout = 2 # Seconds.
    
        receiving_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
        receiving_socket.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)
        receiving_socket.settimeout(timeout)
        receiving_socket.bind(("", host_port))
    
        sending_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
        sending_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    
        received_ip = None
        current_hop = 1
        max_hop = 100
        while received_ip != host_ip and current_hop < max_hop:
            sending_socket.setsockopt(socket.IPPROTO_IP, socket.IP_TTL, current_hop)
            sus = True
            for i in range(7):
                try:
                    sending_socket.sendto(bytes(str(current_hop), 'utf-8'), (host_ip, host_port))
                    data, addr = receiving_socket.recvfrom(1)
                    if addr:
                        received_ip = addr[0]
                        print(f"hop: {current_hop} -> {received_ip}")
                        sus = False
                        break
                    else:
                        raise "sus"
                except:
                    continue
            if sus:
                print(f"hop: {current_hop} -> *")
            current_hop += 1
    
    
    if __name__ == "__main__":
        main()

    Что-то я давно не заходил... был занят, писал утилиту. Лицензия – «MIT».

    Запостил: JloJle4Ka, 18 Декабря 2022

    Комментарии (9) RSS

    Добавить комментарий