출처
Wireshark에서 tcpreplay의 멀티캐스트가 보이지만 응용프로그램에서는 안 보입니다.
저는 tcpreplay로 진행할 멀티캐스트 패킷 캡쳐를 얻었습니다.
sysctl net.ipv4.conf.all.rp_filter=0
sysctl net.ipv4.conf.eth0.rp_filter=0
tcpreplay -i eth0 --loop=100 new.pcap
Wireshark로 eth0의 트래픽을 관찰하고 제가 관심있는 패킷(224.0.23.60:4937입니다.) 을 볼 수 있었습니다.
하지만 다음 Python 응용프로그램은 패킷을 찾을 수 없습니다.
import socket
import struct
MCAST_GRP = '224.0.23.60'
MCAST_PORT = 4937
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((MCAST_GRP, MCAST_PORT)) # use MCAST_GRP instead of '' to listen only
# to MCAST_GRP, not all groups on MCAST_PORT
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
print '#'
print sock.recv(64)
netstat -g를 실행하면 다음 출력이 나옵니다.
lo 1 all-systems.mcast.net
eth0 1 224.0.23.60
여기에 뭔가 놓친 것이 있습니까?
[편집] 정확히 내 패킷 캡처에서 IP src가 동일한 네트워크 하위 도메인 (ip src : 192.168.1.10)에 없는 반면 내 ip는 146.186.197.164와 비슷합니다.
1개의 답변만 발췌
이 문서(http://tcpreplay.synfin.net/wiki/FAQ)를 주의깊게 읽어 보시면, tcpreplay는 TCP/IP stack과 이더넷 장치 드라이버 사이에 패킷을 보내므로, 호스트 시스템의 TCP/IP 스택에서는 패킷을 볼 수 없습니다.
저는 VirtualBox로 '호스트 전용 어댑터'로 설정된 Debian OS를 사용하여 그 머신에서 tcp를 사용하여 해결하였습니다.
http://tcpreplay.synfin.net/wiki/FAQ 일부 발췌
tcpreplay를 같은 컴퓨터에서 실행하여 패킷을 보낼 수 있습니까?
일반적으로 안 됩니다. tcpreplay가 패킷을 보낼 때, 이 프로그램은 TCP/IP stack과 네트워크 카드의 장치 드라이버 사이에 패킷을 주입합니다. 그 결과, tcpreplay를 실행하는 TCP/IP 시스템은 패킷을 볼 수 없습니다.
한 가지 제안할 수 있는 것은VMWare, Parallels 또는 Xen 같은 것을 사용하는 것입니다. 가상 머신(guest)에서 tcpreplay를 실행하는 것은 호스트 운영체제에서 패킷을 볼 수 있게 합니다.
'도움받은 정보' 카테고리의 다른 글
구글 클라우드 / Compute 인스턴스로부터 MariaDB에 접근할 수 없습니다. (0) | 2019.03.11 |
---|---|
어떻게 소켓의 FIN_WAIT1 상태를 제거할 수 있을까요? (0) | 2018.11.26 |
언제 프로세스가 SIGABRT (시그널6)을 얻습니까? (0) | 2018.02.03 |
[nodejs] 가능한 EventEmitter 메모리 누수 감지됨 (0) | 2017.11.29 |
C의 int 배열을 정렬하고 중복 제거하기 (0) | 2017.04.13 |