Tcpdump: 가상 인터페이스에서 나가는 패킷을 캡처하는 방법은 무엇입니까?

Tcpdump: 가상 인터페이스에서 나가는 패킷을 캡처하는 방법은 무엇입니까?

지금 테스트 중인 Linux 시스템에는 Eth 헤더와 IP 헤더 사이에 캡슐화된 자체 헤더를 추가/조작하기 위해 서로 연결된 여러 개의 가상 L2 장치가 있습니다.

이제 이것은 "tcpdump -xx -i virtual_if_1"에 의해 표시된 캡처된 나가는 패킷입니다.

tcpdump: WARNING: xxxtype 1000 not supported by libpcap - falling back to cooked socket
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on virtual_if_1, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes

20:20:25.558423 IP 0.0.0.0.52368 > 5.5.2.2.telnet: S 3501169179:3501169179(0) win 35848 <mss 17924,sackOK,timestamp 17386889 0,nop,wscale 8>
    0x0000:  0004 03e8 0006 0000 0000 1b9a 0000 0800
    0x0010:  4510 003c d792 4000 4006 5c13 0000 0000
    0x0020:  0505 0202 cc90 0017 d0af 9a1b 0000 0000
    0x0030:  a002 8c08 0735 0000 0204 4604 0402 080a
    0x0040:  0109 4d89 0000 0000 0103 0308`

0x0010부터 시작하면 L3의 IP 헤더인데 0x0000-0x000f는 가짜이므로 이 가상 장치가 L3 헤더에 추가해야 할 헤더가 아닙니다. tcpdump가 가상의 이더넷 헤더를 자동으로 추가하는 것 같나요? lipcap이 이 유형을 지원하지 않는다는 위의 경고 때문인가요?

tcpdump는 이 데이터를 어디서 얻나요? sk_buff->data에서 온 건가요?

감사해요

답변1

답을 찾은 것 같습니다. 실제로 libcap에 의해 의사 프로토콜로 추가되었습니다.

Linktype_SLL 헤더 형식

SLL의 WireShark 설명

관련 정보