#include "libip6tc.h"
int getRulePackets()
{
struct ip6tc_handle *handle;
char *tables = "filter";
const char *error = NULL;
const char * chain = NULL;
struct ip6t_counters counters;
const char *pol = NULL;
const struct ip6t_entry* rule;
handle= ip6tc_init( tables );
if(handle == NULL )
{
error= ip6tc_strerror(errno);
printf("iptc_initerror:%s\n",error);
return-1;
}
for(chain = ip6tc_first_chain(handle); chain; chain = ip6tc_next_chain(handle) )
{
printf("%s\t",chain);
pol= ip6tc_get_policy(chain,&counters,handle);
printf("%s\t",pol);
printf("%llu\t",counters.pcnt);//\u7ecf\u8fc7\u8be5\u94fe\u7684\u5305\u7684\u6570\u91cf
printf("%llu\n",counters.bcnt);//\u7ecf\u8fc7\u8be5\u94fe\u7684\u5b57\u8282\u6570
for(rule = ip6tc_first_rule(chain,handle); rule; rule = ip6tc_next_rule(rule,handle))
{
const char *target = NULL;
target= ip6tc_get_target(rule,handle);
printf("%s\t",target);
printf("%llu\t",rule->counters.pcnt);//\u547d\u4e2d\u8be5\u89c4\u5219\u7684\u5305\u6570
printf("%llu\t",rule->counters.bcnt);//\u547d\u4e2d\u8be5\u89c4\u5219\u7684\u5b57\u8282\u6570
struct protoent *pro = NULL;
pro= getprotobynumber(rule->ipv6.proto);
if(pro != NULL )
{
printf("%s\t",pro->p_name);
}
if(rule->ipv6.iniface[0] == '\0' )//\u8f93\u5165\u7f51\u7edc\u63a5\u53e3\u9ed8\u8ba4\u4e0d\u6307\u5b9a\u53ef\u4ee5\u901a\u8fc7-i\u6307\u5b9a\u5982 \u2013I ehh0
printf("any\t");
else
printf("%s\t",rule->ipv6.iniface);
if(rule->ipv6.outiface[0] == '\0' )//\u8f93\u51fa\u7f51\u7edc\u63a5\u53e3\u9ed8\u8ba4\u4e0d\u6307\u5b9a\u53ef\u4ee5\u901a\u8fc7-o \u6307\u5b9a
printf("any\t");
else
printf("%s\t",rule->ipv6.outiface);
char addr[128] = {0};
printf("%s\t",inet_ntop(AF_INET6,&(rule->ipv6.src),addr,sizeof(addr)));
printf("%s\t",inet_ntop(AF_INET6,&(rule->ipv6.dst),addr,sizeof(addr)));
}
}
return 0;
}