linux下原始套接字打印问题

明象Dean 2009-04-24 10:02:59
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <linux/if_ether.h>
#include <linux/in.h>
#define BUFFER_MAX 2048

int main(int argc,char *argv[])
{
int sock,nread,proto;
char buff[BUFFER_MAX];
char *ethheader,*ipheader;
if((sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))) < 0)
{
fprintf(stdout, "create socket error\n");
exit(0);
}
while(1)
{
nread=recvfrom(sock,buff,2048,0,NULL,NULL);
printf("the num of packets %d",nread);
printf("whole pack %s",buff); //我想用这句打印出整个包的数据,为什么不行呢?
}
return 0;
}

谢谢哪位帮忙!

...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
nread是多少?你先在buff的尾部加个'\0'看看.
morris88 2009-04-24
  • 打赏
  • 举报
回复
呵呵,printf 打印字符串的哦,要求以 '\0' 结尾,貌似你收到网络数据包不一定符合这个要求,
所以,你应该循环打印每个字节,或按协议格式打印...
明象Dean 2009-04-24
  • 打赏
  • 举报
回复
谢谢,把buff[i]=buff[i]&0xff

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧