tcpdump
다음과 같이 데이터를 캡처 하려고합니다 .
$ sudo tcpdump -Xi eth0
장치와 PC를 서로 연결했습니다. 양쪽에서 상대방에게 메시지를 보내는 간단한 테스트 애플리케이션을 실행합니다.
문제는 양쪽 모두 메시지를 받았지만 tcpdump
아무 것도 인쇄되지 않는다는 것입니다. 때로는 ARP 요청만 표시되는 경우도 있습니다.(현재 LAN에 연결되어 있지 않은 다른 PC에 ARP 요청).
$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:0f:ea:62:ce:d6
inet addr:10.5.57.197 Bcast:10.5.255.255 Mask:255.255.0.0
inet6 addr: fe80::20f:eaff:fe62:ced6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:66497 errors:0 dropped:4334 overruns:0 frame:0
TX packets:3785 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6539170 (6.5 MB) TX bytes:553828 (553.8 KB)
Interrupt:21
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:529 errors:0 dropped:0 overruns:0 frame:0
TX packets:529 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:71721 (71.7 KB) TX bytes:71721 (71.7 KB)
답변1
패킷을 캡처하여 <file>.pcap
확장자를 가진 파일에 쓴 다음 wireshark
.
CentOS를 예로 들어 패킷을 캡처합니다.
$ tcpdump -i eth0 -s 1500 -w /root/<filename.pcap>
답변2
뭔가 다른 일이 벌어지고 있는 게 틀림없어요. 다음 테스트는 나에게 잘 작동합니다. 나는 그것을 클라이언트와 서버로 사용하고 있으며 내 로컬 시스템에서 실행되고 있습니다 socat
.tcpdump
1. socat 서버(리스너) 설정
$ socat - TCP-LISTEN:2222,crlf
2. socat 클라이언트 설정
$ socat - TCP:192.168.1.80:2222
3. 이제 tcpdump를 실행합니다.
$ sudo tcpdump -Xi wlp1s0 src 192.168.1.3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp1s0, link-type EN10MB (Ethernet), capture size 65535 bytes
10:04:27.977900 ARP, Request who-has 192.168.1.149 tell client.mydom.net, length 46
0x0000: 0001 0800 0604 0001 0019 d1e8 4c95 c0a8 ............L...
0x0010: 0103 0000 0000 0000 c0a8 0195 0000 0000 ................
0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
10:04:29.206642 ARP, Request who-has 192.168.1.149 tell client.mydom.net, length 46
0x0000: 0001 0800 0604 0001 0019 d1e8 4c95 c0a8 ............L...
0x0010: 0103 0000 0000 0000 c0a8 0195 0000 0000 ................
0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
10:04:29.337077 IP client.mydom.net.49878 > server.mydom.net.EtherNet/IP-1: Flags [P.], seq 1391164406:1391164421, ack 2721007444, win 46, options [nop,nop,TS val 535977938 ecr 956529523], length 15
0x0000: 4500 0043 8218 4000 4006 34f9 c0a8 0103 E..C..@[email protected].....
0x0010: c0a8 0150 c2d6 08ae 52eb 7bf6 a22f 4754 ...P....R.{../GT
0x0020: 8018 002e 964f 0000 0101 080a 1ff2 5fd2 .....O........_.
0x0030: 3903 7b73 5468 6973 2069 7320 6120 7465 9.{sThis.is.a.te
0x0040: 7374 0a st.
위 시나리오에서는 클라이언트 측에 "This is a test"라는 메시지를 입력했는데, 서버의 socat
인스턴스 에도 표시되었습니다 tcpdump
.
$ socat - TCP:server.mydom.net:2222
This is a test
서버 출력:
$ socat - TCP-LISTEN:2222,crlf
This is a test
답변3
이 문제에 직면한 사람을 위해 또 다른 훌륭한 답변이 있습니다.https://stackoverflow.com/questions/3130911/tcpdump-localhost-to-localhost, 표시되지 않은 트래픽이 localhost->localhost 트래픽인 경우. 다른 상황에서는 이렇게 할 필요가 없을 것 같지만 적어도 해야만 하는 경우가 몇 번 있습니다.
답변4
이 시도:
sudo bash
그런 다음
tcpdump ...
일부 Linux 버전에서는 tcpdump 또는 유사한 도구가 sudo에서 예상대로 작동하지 않는 경우가 있습니다.