int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) {
struct udp_sock *up = udp_sk(sk);
int rc;
int is_udplite = IS_UDPLITE(sk);
/*
* Charge it to the socket, dropping if the queue is full.
*/
if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
goto drop;
int socket(int domain, int type, int protocol); API的文档表明,如果给定域存在多个协议,则该协议指定特定的协议。这似乎意味着只能为给定套接字的给定域指定一个协议。
我在Linux中尝试使用原始套接字,但后来我无意中发现了这个协议。我知道pcap可以用来捕获任何协议的数据包。我使用pcap编写了一个Q&D程序,我注意到if_ether.h文件中定义的大多数常见协议都被捕获了。
因此,目前在我的程序中,我只能指定要捕获的数据包的一种类型。有什么方法可以用标准的Linux头和库复制pcap行为吗?pcap是如何做到这一点的?我试着用谷歌搜索这