Как я могу захватить пакет UDP и найти значения TTL из пакета, используя python - PullRequest
3 голосов
/ 02 марта 2010

HI

Я хочу перехватить пакеты UDP, присоединившись к группе многоадресной рассылки. после получения пакета я хочу проверить значение TTL из этого пакета UDP. Как я могу добиться этого с помощью Python?

Код Sammple, как указано ниже: Вот rec_port - любой порт, который я использовал для привязки; например: 9180 rec_hostname - любая группа многоадресной рассылки, к которой я присоединился, например: 239.2.2.2

 #! /usr/bin/env python
    .........
    ............
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind(("", rec_port))
    mreq = struct.pack("4sl", socket.inet_aton(rec_hostname), socket.INADDR_ANY)
    sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

    total_length = 0
    while True:
            print "Waiting for the packets, if no packets recevied by 10 seconds, than i will exit"
            sock.settimeout(10)
            data , address = sock.recvfrom(2048)
            if len(data) > 1:
                                    total_length=total_length + len(data)
                                    print "Data is:", data
                                    print "Length of data received is:", len(data)
                                    print "Packet recevied from :", address[0]
                                    print "Total Packet size:", total_length
            else:
                    break
    sock.close()
    print "Total Packet size:", total_length

Ответы [ 2 ]

2 голосов
/ 02 марта 2010

Возможно, вы захотите использовать эту оболочку Python. Если он не удовлетворяет, вы можете самостоятельно обернуть libpcap .

В ответ на раскрутку: Вам не нужно вести себя «смешно» с libpcap, вы можете вводить и отслеживать действительный трафик, т.е. предназначенный для вашей сетевой карты.

Редактировать: Прочтите это руководство по pcap , чтобы понять, как изолировать поле ttl.

0 голосов
/ 02 марта 2010

в комментарии вы сказали нам, что можете присоединиться к группе многоадресной рассылки.

теперь вы можете использовать getsockopt(), указать IPPROTO_IP для параметра уровня и IP_MULTICAST_TTL для параметра, чтобы получить значение TTL, которое записывается в исходящие пакеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...