HI어떻게 UDP 패킷을 캡처하고 파이썬을 사용하여 패킷에서 TTL 값을 찾을 수 있습니까?
멀티 캐스트 그룹에 가입하여 UDP 패킷을 캡처하고 싶습니다. 수신 패킷 후 그 UDP 패킷에서 TTL 값을 확인하고 싶습니다. 어떻게 내가 파이썬을 사용하여 이것을 얻을 수 있습니까? 아래에 설명한 바와 같이
Sammple 번호 : 여기 rec_port 제가 결합하는 데 사용했던 모든 포트; 239.2.2.2
당신은 아마 this 파이썬 래퍼를 사용하려면#! /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.3 버전을 사용하고 있습니다.이 버전에서는 pcap 또는 libpcap 모듈/lib를 사용할 수 없습니다. 지원되지 않습니다. 멀티 캐스트 그룹에 바인딩 할 수 있습니다. 하지만 수신 된 패킷에서 TTL 값을 어떻게 읽을 수 있습니까? –
TTL 값은 패킷의 IP 헤더 부분에 있습니다. 일반적으로 사용자 공간 프로그램에서는 사용할 수 없으므로 멀티 캐스트 그룹에 참여하면 도움이되지 않습니다. libpcap 또는 이와 비슷한 것이 필요합니다. pycap 페이지는 그들이 2.3을지지한다고 말하고 있습니까? – Wim
pycap에서 실제로 작동하지 않는 경우, 다른 옵션 (그러나 더 복잡한 옵션)은'os.popen'을 사용하여'tcpdump'를 호출하고 출력을 구문 분석하는 것입니다 ... – Wim