补天论坛 - UNIX软件技术   
分页显示
返回《UNIX软件技术》 快速返回
作 者

主题:关于抓包的问题--高手请进(libpcap)

pengchong
=化零为整=
积分:2
贴数:1
 日期:2007-8-8 13:32:50

void tcp_callback(u_char *a,const struct pcap_pkthdr *packet_header,const u_char * packet_content)
{
struct tcp_header *tcp_protocol;
u_char flags;


tcp_protocol=(struct tcp_header*)(packet_content+14+20);


flags=tcp_protocol->tcp_flags;
//printf("源  端口号:%d\n",ntohs(tcp_protocol->tcp_sport));
//printf("目的端口号:%d\n",ntohs(tcp_protocol->tcp_dport));
//printf("首部长度:%d\n",tcp_protocol->tcp_offset*4);
printf("序列号:%u\n",ntohl(tcp_protocol->tcp_ackknowledgement));
printf("确认号:%u\n",ntohl(tcp_protocol->tcp_ack));
//printf("%d\n",tcp_protocol->len);
printf("%d\n",packet_header->len);

//printf("窗口大小:%d\n",ntohs(tcp_protocol->tcp_windows));
//printf("紧急指针:%d\n",ntohs(tcp_protocol->tcp_urgent_pointer));
//printf("校验和:%d\n",ntohs(tcp_protocol->tcp_checksum));
switch (ntohs(tcp_protocol->tcp_dport))
{
case 80:   //printf("上层协议HTTP\n"); break;
case 21:   printf("上层协议FTP\n"); break;
case 23:    printf("上层协议TELNET\n"); break;
case 25:   printf("上层协议SMTP\n"); break;
case 110:   printf("上层协议POP3\n"); break;
default:    break;
}
//printf("标记:%d\n",tcp_protocol->tcp_flags);
if (flags & 0x08) printf("PSH");
if (flags & 0x10) printf("ACK");
if (flags & 0x02) printf("SYN");
if (flags & 0x20) printf("URG");
if (flags & 0x01) printf("FIN");
if (flags & 0x04) printf("RST");
printf("\n");
printf("%c",packet_content);
}


我想显示包的具体内容,现在显示包头和协议没有问题了.

printf("%c",packet_content);这句话怎么不行呢?


谢谢哪位高手指教!!!!!!!1!!!!!!





新补天网  新补天网讨论版
Neil
=化零为整=
积分:170
贴数:6
日期: 2007-8-22 14:05:30  

packet_content 是你抓到的数据包,你用 printf("%c",packet_content); 打印的是这个包的第一个字节的ASCII字符表示,不巧的是,以太网桢最前面的12字节是源MAC地址和目的MAC地址,而MAC地址基本上是以 00 开头,于是你就什么也没有打印出来了

vi /usr/include/linux/if_ether.h

 

 

cnf1980
=化零为整=
积分:12
贴数:15
日期: 2007-11-24 13:30:56  
同意楼上的意见。
返回《UNIX软件技术》 快速返回


 

如果您想发帖,请先注册或登录


Copyright © 2006 Patching.net All rights reserved.