我正在创建一种接入点。
根据默认的服务质量 (QoS) 类,我从我的机器捕获所有类型的所有数据包,以便在转发它们之前对它们进行优先级排序。
通过socket
使用ETH_P_ALL
参数调用,我可以获得任何协议类型的所有传入数据包:
if ((sockfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) == ERROR) {
perror("socket");
exit(1);
}
通过使用ethhdr
,iphdr
和structs 我无法检索有关哪个应用程序发送每个数据包的信息tcphdr
。udphdr
但是,Voip 和 SNMP 都使用 UDP,我不知道两者中的哪一个向我发送了 UDP 包。
我想知道哪些应用程序正在发送 UDP 数据包,因此我可能会遵循 QoS 类并在其他数据包(例如电子邮件)之前转发一些数据包(例如会话语音)。
为了识别协议,我应该使用 TCP 和 UDP 端口号列表吗?