我正在玩libnetfilter_conntrack
来捕捉数据包到目前为止,以下代码在Ubuntu上工作,除了Ubuntu 18.04。
尽管浏览或访问ssh,但没有输出。
你知道为什么???
static int cb(enum nf_conntrack_msg_type eMsgType,
struct nf_conntrack *psConntrack,
void *pvData)
{
char buf[1024] = {0,};
nfct_snprintf(buf, sizeof(buf), psConntrack, eMsgType, NFCT_O_DEFAULT, NFCT_OF_TIME);
printf("%s\n", buf);
return NFCT_CB_STOP;
}
int main()
{
struct nfct_handle *pSNfctHandle;
pSNfctHandle = nfct_open(CONNTRACK, NFCT_ALL_CT_GROUPS);
nfct_callback_register(pSNfctHandle, NFCT_T_ALL, cb, NULL);
nfct_catch(pSNfctHandle);
nfct_close(pSNfctHandle);
return 0;
}
我在添加nf_conntrack,nf_conntrack_ipv4,nf_conntrack_netlink内核模块后进行了测试。
答案 0 :(得分:0)
我们在18.04上遇到了类似的问题。到目前为止,唯一已知的解决方案是命令“ ufw enable”,但这是相当高级的。很高兴知道更多原子操作可以在Ubuntu 18.x上重新启用netfilter功能。随便提出建议吧。
答案 1 :(得分:0)
ufw enable 太强大了:)
代替命令:
ufw启用
添加以下防火墙规则:
/sbin/iptables -t filter -I OUTPUT 1 -p tcp -m conntrack --ctstate RELATED,ESTABLISHED
/sbin/ip6tables -t filter -I OUTPUT 1 -p tcp -m conntrack --ctstate RELATED,ESTABLISHED
如有必要,您还可以使用INPUT和FORWARD链