Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Network programming 读取BPF组件_Network Programming_Bpf - Fatal编程技术网

Network programming 读取BPF组件

Network programming 读取BPF组件,network-programming,bpf,Network Programming,Bpf,我正在尝试阅读一些过滤器的BPF语法,以尝试了解它的功能。有一件事我找不到,那就是字节偏移量从哪里开始。意思是,如果我们有以下汇编代码: 0000: 0x28 0x00 0x00 0x00000004 ldh $data[4] 0001: 0x15 0x00 0x61 0x00000028 jeq 40 true:0002 false:0099 0002: 0x30 0x00 0x00 0x0000000d ldb $data[13] 0003: 0x14 0x00 0x

我正在尝试阅读一些过滤器的BPF语法,以尝试了解它的功能。有一件事我找不到,那就是字节偏移量从哪里开始。意思是,如果我们有以下汇编代码:

 0000: 0x28 0x00 0x00 0x00000004   ldh $data[4]
 0001: 0x15 0x00 0x61 0x00000028   jeq 40   true:0002 false:0099
 0002: 0x30 0x00 0x00 0x0000000d   ldb $data[13]
 0003: 0x14 0x00 0x00 0x00000033   sub 51
 0004: 0x15 0x00 0x5e 0x00000006   jeq 6    true:0005 false:0099
问题1 对于字节偏移4,这是否使我处于802.3帧的目标MAC地址的中间?还是在序言中?我要问的是,我从数据包的什么地方开始,然后走4个字节到我的半个字

问题2
如果它在MAC地址中,那么编写我自己的数据包的以太网帧是否可行?这样做的目的是编写一个连接并传递所有BPF需求的客户机

关于你的第一个问题:这取决于你在哪里以及如何附加你的BPF程序

如果将其作为分类器连接到TC traffic control接口,它将开始工作 L2以太网报头目标MAC地址

如果将其连接到插座,我认为有几种情况:

如果在创建套接字时通过的协议是TCP,则程序将从L3 IP头启动。例如,见。 如果所需的协议是“每个数据包”,则程序开始在MAC报头上工作。请参见示例grep了解ETH_P_ALL。 编辑:与协议不同的是,这更可能是正在使用的AF_数据包与AF_INET中的套接字域在这里造成了差异


对于第二个问题,您可以使用scapy构建以太网报头和有效负载,但很抱歉,我不理解您所说的“连接并传递所有BPF要求”是什么意思……请您再详细说明一下好吗?

对于第一个问题,这取决于您在何处以及如何连接BPF程序

如果将其作为分类器连接到TC traffic control接口,它将开始工作 L2以太网报头目标MAC地址

如果将其连接到插座,我认为有几种情况:

如果在创建套接字时通过的协议是TCP,则程序将从L3 IP头启动。例如,见。 如果所需的协议是“每个数据包”,则程序开始在MAC报头上工作。请参见示例grep了解ETH_P_ALL。 编辑:与协议不同的是,这更可能是正在使用的AF_数据包与AF_INET中的套接字域在这里造成了差异


对于第二个问题,您可以使用scapy构建以太网报头和有效负载,但很抱歉,我不明白您所说的“连接并传递所有BPF要求”是什么意思……您能再详细说明一下吗?

因此,如果使用setsockopt3、SOL_SOCKET、So_ATTACH_FILTER、d\0\0\300\221\4\10,8那么我假设它将从IP头开始?我的意思是,我需要满足所有的过滤器要求。如果它过滤掉了端口22,我需要通过端口22连接。对于第二个问题,我的意思是我需要满足所有的过滤要求。就像过滤掉端口22一样,据我所知,我需要通过端口22进行连接,对于套接字,它取决于使用套接字*域*、类型、协议调用创建的套接字的域,而不是后面的setsockopt。如果您想通过端口22连接,请使用scapy或应用程序中提供的任何其他方法。例如,SSH默认为端口22,但您可以使用-p进行更改;其他应用程序也可以有类似的选择。Scapy将允许您从头开始伪造数据包。您是否需要它取决于您试图实现什么。因此,如果它使用setsockopt3、SOL_SOCKET、So_ATTACH_FILTER、d\0\0\300\221\4\10、8,那么我假设它将从IP头开始?我的意思是,我需要满足所有的过滤器要求。如果它过滤掉了端口22,我需要通过端口22连接。对于第二个问题,我的意思是我需要满足所有的过滤要求。就像过滤掉端口22一样,据我所知,我需要通过端口22进行连接,对于套接字,它取决于使用套接字*域*、类型、协议调用创建的套接字的域,而不是后面的setsockopt。如果您想通过端口22连接,请使用scapy或应用程序中提供的任何其他方法。例如,SSH默认为端口22,但您可以使用-p进行更改;其他应用程序也可以有类似的选择。Scapy将允许您从头开始伪造数据包。你是否需要它取决于你想要实现什么。