免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3741 | 回复: 9
打印 上一主题 下一主题

[网络子系统] tcpdump抓不到包 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-20 10:18 |只看该作者 |倒序浏览
小弟初学网络编程,想用tcpdump抓包看一下,但是死活抓不到,求大神指点
客户端代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <netinet/in.h>
  7. #include <netdb.h>
  8. #include <sys/socket.h>
  9. #include <sys/wait.h>

  10. #define  SERVER_PORT 8003
  11. int main(int argc,char *argv[])
  12. {
  13.     int sockfd;
  14.     struct sockaddr_in their_addr;
  15.     struct hostent *hostname;
  16.     int num_bytes;

  17.     if(argc != 3)
  18.     {
  19.         fprintf(stderr,"usage:talker hostname message\n");
  20.         exit(1);
  21.     }
  22.     if((hostname = gethostbyname(argv[1])) == NULL)
  23.     {
  24.         fprintf(stderr,"gethostbyname");
  25.         exit(1);
  26.     }
  27.     if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1)
  28.     {
  29.         fprintf(stderr,"socket");
  30.         exit(1);
  31.     }

  32.     their_addr.sin_family = AF_INET;
  33.     their_addr.sin_port = htons(SERVER_PORT);
  34.     their_addr.sin_addr = *((struct in_addr *)hostname->h_addr);
  35.     bzero(&(their_addr.sin_zero),8);

  36.     if((num_bytes = sendto(sockfd,argv[2],strlen(argv[2]),0,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))) == -1)
  37.     {
  38.         fprintf(stderr,"sendto");
  39.         exit(1);
  40.     }
  41.     printf("sent %d bytes to %s\n",num_bytes,inet_ntoa(their_addr.sin_addr));
  42.     close(sockfd);
  43.     return 0;
  44. }
复制代码
服务器代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <sys/wait.h>
  8. #include <netinet/in.h>

  9. #define SERVER_PORT 8003
  10. #define MSG_BUF_SIZE 128

  11. main()
  12. {
  13.     int sockfd;
  14.     struct sockaddr_in my_addr;
  15.     struct sockaddr_in their_addr;
  16.     int addr_len,numbytes;
  17.     char buffer[MSG_BUF_SIZE];

  18.     if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1)
  19.     {
  20.         fprintf(stderr,"socket error");
  21.         exit(1);
  22.     }
  23.     my_addr.sin_family = AF_INET;
  24.     my_addr.sin_port = htons(SERVER_PORT);
  25.     my_addr.sin_addr.s_addr = INADDR_ANY;
  26.     bzero(&(my_addr.sin_zero),8);

  27.     if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1)
  28.     {
  29.         fprintf(stderr,"bind error\n");
  30.         exit(1);
  31.     }
  32.    
  33.     addr_len = sizeof(struct sockaddr);

  34.     if((numbytes = recvfrom(sockfd,buffer,MSG_BUF_SIZE,0,(struct sockaddr *)&their_addr,&addr_len)) == -1)
  35.     {
  36.         fprintf(stderr,"recvfrom error");
  37.         exit(1);
  38.     }

  39.     printf("got packet from %s\n",inet_ntoa(their_addr.sin_addr));
  40.     printf("packet is %d bytes long\n",numbytes);
  41.     buffer[numbytes]='\0';
  42.     printf("packet contains \"%s\"\n",buffer);
  43.     close(sockfd);
  44. }

复制代码
所用的命令是:tcpdump port 8003
程序能够正常运行,但是抓不到包

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
2 [报告]
发表于 2012-06-20 10:21 |只看该作者
没人呢,怎么,自己up

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
3 [报告]
发表于 2012-06-20 10:37 |只看该作者
坐等大神阿

论坛徽章:
0
4 [报告]
发表于 2012-06-20 14:28 |只看该作者
本帖最后由 daniel_kohler 于 2012-06-20 14:33 编辑

回复 3# goingstudy


    你发的包是UDP的啊,tcpdump udp port 8003

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
5 [报告]
发表于 2012-06-21 09:28 |只看该作者
回复 4# daniel_kohler


    不是那个问题,tcpdump默认是都抓的,我的是因为在同一台机器上,tcpdump不抓本地的

论坛徽章:
0
6 [报告]
发表于 2012-06-21 09:41 |只看该作者
回复 5# goingstudy


    把你的本地的interface name用-i参数加上去试试看?

论坛徽章:
0
7 [报告]
发表于 2012-07-09 09:46 |只看该作者
tcpdump -ilo port 8003

论坛徽章:
0
8 [报告]
发表于 2012-07-09 14:03 |只看该作者
这种情况,走实际硬件么?

论坛徽章:
0
9 [报告]
发表于 2012-07-13 17:10 |只看该作者
加Log印,看Client到底是不是发包了

另,你的server也没有在持续监听啊

论坛徽章:
0
10 [报告]
发表于 2012-08-29 14:39 |只看该作者
回复 1# goingstudy


    pkt_type 时本机的话貌似抓不到··


if (skb->pkt_type == PACKET_LOOPBACK)
                goto drop;
这个是libcap 的挂载点  直接就丢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP