C在Linux套接字过滤器中构造助记符试图说得通

问题描述

我正在尝试查找有关C Linux套接字过滤器或C Linux BPS套接字的详细信息。该链接上的套接字以及此链接上其他地方的网络过滤器https://www.kernel.org/doc/Documentation/networking/filter.txt 是这样的

                /* From the example above: tcpdump -i em1 port 22 -dd */
    struct sock_filter code[] = {
    { 0x28,0x0000000c },{ 0x15,8,0x000086dd },{ 0x30,0x00000014 },2,0x00000084 },1,0x00000006 },17,0x00000011 },{ 0x28,0x00000036 },14,0x00000016 },0x00000038 },12,13,0x00000800 },0x00000017 },{ 0x45,6,0x00001fff },{ 0xb1,0x0000000e },{ 0x48,0x00000010 },{ 0x06,0x0000ffff },0x00000000 },};

当我运行tcp dump命令时

 tcpdump -i eth0  -s 1500 port not 22

显示进入eth0的数据包。可能还有小包出去了(你告诉我)。

我喜欢理解C过滤器结构以及如何理解上面的代码以及如何与sock_filter结构中的jt,jf和k值建立联系。一些信息,我该如何深入了解它以了解sock_filter中的这些十六进制代码。到目前为止,我还发现有关JIT和汇编语言的信息,所以请向我提供有关如何开始理解该结构及其定义的信息。

在此tcpdump命令提到的链接的示例过滤器代码

     tcpdump -i em1 port 22 -dd

当我在终端中尝试此操作时,它说未检测到任何设备。这是生成十六进制代码的命令吗(也请尝试说明一下上面的sock_filter数据数组的一些元素)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)