免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: kidexp
打印 上一主题 下一主题

问关于Godbach兄的通信代码的问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-08-19 11:31 |只看该作者

回复 #20 Godbach 的帖子

现在可以ping通,也可以ping g.cn 但就是上不了google
我就只设置了两个iptables -I INPUT -j ACCEPT
                         iptables -I INPUT -j QUEUE
两个之间切换

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
22 [报告]
发表于 2009-08-19 11:42 |只看该作者
你这样,相当于把所有报文都QUEUE了。是不是非TCP协议的报文,你都直接告诉内核ACCEPT,而TCP的,做完计数,也接着ACCEPT了?

论坛徽章:
0
23 [报告]
发表于 2009-08-19 11:55 |只看该作者

回复 #22 Godbach 的帖子

对~~你在这里截获的报文应该包含所有类型的,
是可以指定类型接收吗?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
24 [报告]
发表于 2009-08-19 12:02 |只看该作者
可以啊,这些都是IPtables规则
iptables -I INPUT -p tcp -j QUEUE

这样就插入一条新规则,所有通过INPUT链的TCP报文将被QUEUE

论坛徽章:
0
25 [报告]
发表于 2009-08-19 12:10 |只看该作者

回复 #24 Godbach 的帖子

哦,对了,忘记了,只寄希望于编程当中了....
我设置了这条规则,还是上不了g.cn
是因为TCP包的处理效率太低?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
26 [报告]
发表于 2009-08-19 13:54 |只看该作者

回复 #25 kidexp 的帖子

我觉得再忙也不至于这样啊。另外,如果你只做包计数的话,没有必要报文的载荷传上来,只需要将meta data传到用户空间即可。

论坛徽章:
0
27 [报告]
发表于 2009-08-19 17:57 |只看该作者

回复 #26 Godbach 的帖子

什么叫meta data?


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <signal.h>
  5. #include <netinet/ip_icmp.h>
  6. #include <netinet/ip.h>
  7. #include <arpa/inet.h>
  8. #include "libipq.h"

  9. #define ETH_HDRLEN 14
  10. #define NF_ACCEPT         1
  11. #define NF_DROP          0


  12. struct ipq_handle *h = NULL;

  13. static void sig_int(int signo)
  14. {
  15.         ipq_destroy_handle(h);
  16.         printf("Exit: %s\n", ipq_errstr());
  17.         exit(0);
  18. }

  19. int main(void)
  20. {
  21.         unsigned char buf[1024];
  22.         /* creat handle*/
  23.         h = ipq_create_handle(0, PF_INET);
  24.         if(h == NULL){
  25.                 printf("%s\n", ipq_errstr());
  26.                 return 0;
  27.         }
  28.         printf("ipq_creat_handle success!\n");
  29.         /*set mode*/
  30.         unsigned char mode = IPQ_COPY_PACKET;
  31.         int range = sizeof(buf);
  32.         int ret = ipq_set_mode(h, mode, range);
  33.         printf("ipq_set_mode: send bytes =%d, range=%d\n", ret, range);
  34.        
  35.         /*register signal handler*/
  36.         signal(SIGINT, sig_int);

  37.         /*read packet from kernel*/
  38.         int status;
  39.         struct nlmsghdr *nlh;
  40.         ipq_packet_msg_t *ipq_packet;
  41.        
  42.         while(1){
  43.                 status = ipq_read(h, buf, sizeof(buf));
  44.                 if(status > sizeof(struct nlmsghdr))
  45.                 {
  46.                         nlh = (struct nlmsghdr *)buf;
  47.                         ipq_packet = ipq_get_packet(buf);
  48.                         printf("recv bytes =%d, nlmsg_len=%d, indev=%s, datalen=%d, packet_id=%x\n", status, nlh->nlmsg_len,
  49.                                         ipq_packet->indev_name,  ipq_packet->data_len, ipq_packet->packet_id);
  50.                         unsigned char payload[1050];
  51.                         memset(payload, 0x00, sizeof(payload));
  52.                         memcpy(payload + ETH_HDRLEN, ipq_packet->payload, ipq_packet->data_len);
  53.                         printf("\n");
  54.                         struct iphdr * hdr =(struct iphdr *) payload;
  55.                                 ret = ipq_set_verdict(h, ipq_packet->packet_id, NF_ACCEPT,ipq_packet->data_len,payload + ETH_HDRLEN);
  56.                                 printf("TCP  Accepted!\n");       
  57.                 }
  58.         }
  59.         return 0;
  60. }
复制代码

基本就是你的代码,但是就是打开不了网页...

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
28 [报告]
发表于 2009-08-19 18:05 |只看该作者
看一下我的第一篇帖子上介绍了,就是和数据包相关的摘要信息,不要数据包的载荷

论坛徽章:
0
29 [报告]
发表于 2009-08-19 19:37 |只看该作者

回复 #28 Godbach 的帖子

你帮我看看代码,也就没有做什么阿,连计数都不要了,可是我这里就是打不开网页.....、
因为我要对数据包的载荷进行操作,所以必须留着他...

[ 本帖最后由 kidexp 于 2009-8-20 09:04 编辑 ]

论坛徽章:
0
30 [报告]
发表于 2009-08-20 09:01 |只看该作者
ping包是ICMP包吧?
为什么我设置了iptables -I INPUT -p tcp  -j QUEUE
ping 的包还能进入我的程序?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP