zoukankan      html  css  js  c++  java
  • conntrack-tools使用

    基础用法

    系统配置

    ### 开启流数据包统计(packets和bytes)
    # echo "net.netfilter.nf_conntrack_acct=1" >> /etc/sysctl.conf
    ### 开启流持续时间统计(delta-time)
    # echo "net.netfilter.nf_conntrack_timestamp=1" >> /etc/sysctl.conf
    # sysctl -p /etc/sysctl.conf
    

    命令使用

    • 显示当前正在被追踪的流
    # conntrack -L -o ktimestamp
    tcp      6 431666 ESTABLISHED src=10.0.0.2 dst=20.0.0.6 sport=33715 dport=22 packets=17 bytes=2094 src=20.0.0.6 dst=10.0.0.2 sport=22 dport=33715 packets=14 bytes=1870 [ASSURED] mark=0 zone=1 delta-time=336 [start=Wed Sep 13 15:48:40 2017] use=1
    icmp     1 29 src=20.0.0.11 dst=20.0.0.6 type=8 code=0 id=40449 packets=5 bytes=420 src=20.0.0.6 dst=20.0.0.11 type=0 code=0 id=40449 packets=5 bytes=420 mark=0 zone=9 delta-time=4 [start=Wed Sep 13 15:55:46 2017] use=1
    
    • 监控流事件
    # conntrack -E -o ktimestamp
    [NEW] tcp      6 120 SYN_SENT src=10.0.0.2 dst=20.0.0.6 sport=33717 dport=22 [UNREPLIED] src=20.0.0.6 dst=10.0.0.2 sport=22 dport=33717 zone=1
    [DESTROY] tcp      6 src=10.0.0.2 dst=20.0.0.6 sport=33717 dport=22 packets=31 bytes=3042 src=20.0.0.6 dst=10.0.0.2 sport=22 dport=33717 packets=23 bytes=2666 [ASSURED] zone=1 delta-time=142 [start=Wed Sep 13 16:07:06 2017] [stop=Wed Sep 13 16:09:28 2017]
    

    高级用法

    -L命令实现

    # vim main.c
    #include <stdio.h>
    #include <assert.h>
    #include <libmnl/libmnl.h>
    #include <libnetfilter_conntrack/libnetfilter_conntrack.h>
    
    static int dump_cb(enum nf_conntrack_msg_type type, struct nf_conntrack *ct, void *data)
    {
      char buf[1024];
      unsigned int op_type = NFCT_O_DEFAULT;
      unsigned int op_flags = 0;
      nfct_snprintf(buf, sizeof(buf), ct, NFCT_T_UNKNOWN, op_type, op_flags);
      printf("%s
    ", buf);
      return NFCT_CB_CONTINUE;
    }
    
    int main()
    {
      struct nfct_handle *cth = nfct_open(CONNTRACK, 0);
      assert(cth != NULL);
    
      nfct_callback_register(cth, NFCT_T_ALL, dump_cb, NULL);
      struct nfct_filter_dump *filter_dump = nfct_filter_dump_create();
      assert(filter_dump != NULL);
    
      nfct_filter_dump_set_attr_u8(filter_dump, NFCT_FILTER_DUMP_L3NUM, AF_INET);
      nfct_query(cth, NFCT_Q_DUMP_FILTER, filter_dump);
      printf("============测试一下=================
    ");
      nfct_query(cth, NFCT_Q_DUMP_FILTER, filter_dump);
      nfct_filter_dump_destroy(filter_dump);
      nfct_close(cth);
    }
    
    # yum install -y libnetfilter_conntrack-devel libmnl-devel
    # gcc main.c -lnetfilter_conntrack -lmnl -o ct
    

    问题处理

    在容器中运行conntrack命令报错

    conntrack v1.4.4 (conntrack-tools): Operation failed: sorry, you must be root or get CAP_NET_ADMIN capability to do this
    
    ### 解决办法,容器运行需要添加如下参数
    
    # docker run --privileged=true --net=host
    

    参考资料

    conntrack
    iptables-tutorial
    netfilter官网

  • 相关阅读:
    3月1日中国观点股评级:将新浪上调至买入评级
    详讯:新浪第四季度净盈余1亿美元
    陈诉称必应1月全球市场份额首超雅虎
    Facebook收买群组动静办事供应商Beluga
    EMC宣布混杂云战略 年内新开6家中国分公司
    动静称微软最快在3月内推出IE9 RTW版
    Unity3D ShaderLab 混合两张贴图(Blend)
    C# 对排序的认识( Comparison ) ,使用匿名方法实现比较器
    C# 优雅的解决 多线程中访问 UI 的问题
    C# 为SharpDevelop4.1 做了一个深色的配色
  • 原文地址:https://www.cnblogs.com/silvermagic/p/7666093.html
Copyright © 2011-2022 走看看