我对pcap_next()返回的输出感到非常困惑。它在某些条件下始终返回神秘的“C5”字节。当我将该函数的输出与输出形式Wireshark进行比较时,“C5”不存在。
while( 1 ) {
packet = pcap_next(handle, &header);
if( packet == 0 ) {
continue;
}
printf( "Captured: %d %d\n\n", header.caplen, header.len );
_rtmp_print_buff( packet, header.caplen );
printf( "\n\n-------------------\n\n");
//(....)
void _rtmp_print_buff( const u_char *buff, int size ) {
int i;
for( i = 0 ; i < size ; i++ ) {
if( i % 16 == 0 ) printf( "\n" );
printf( "%02X ", (u_char) *(buff+i));
}
printf( "\n" );
}
Wireshark的部分数据包如下所示:
2000 56 b3 7a d7 81 4c c3 **24 ee** 63 57 32 77 24 bd 55
2010 48 c1 94 4c ad e9 a2 8c 90 59 25 ad 94 69 f2 69
_rtmp_print_buff()
返回的相同数据3C D7 55 27 D7 1C 64 2F CE F0 AC 0C 8C 56 B3 7A
D7 81 4C C3 24 **C5** EE 63 57 32 77 24 BD 55 48 C1
94 4C AD E9 A2 8C 90 59 25 AD 94 69 F2 69 8E 4D
在经过一定量的正确捕捉后,它总是出现在同一个地方。如果是libpcap,我的版本可能有问题吗?
$ otool -L /usr/lib/libpcap.dylib
/usr/lib/libpcap.dylib:
/usr/lib/libpcap.A.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)