Змея / Говнокод #28503 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 JloJle4Ka, (Updated )

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

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8