【发布时间】:2015-06-30 08:46:41
【问题描述】:
我正在创建一种接入点。
我从我的机器中捕获所有类型的所有数据包,以便在转发它们之前根据默认的服务质量 (QoS) 类确定它们的优先级。
通过使用ETH_P_ALL参数调用socket,我可以获得任何协议类型的所有传入数据包:
if ((sockfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) == ERROR) {
perror("socket");
exit(1);
}
通过使用 ethhdr、iphdr、tcphdr 和 udphdr 结构,我无法检索有关哪个应用程序发送每个数据包的信息。
但是,Voip 和 SNMP 都使用 UDP,我不知道两者中的哪一个向我发送了 UDP 包。
我想知道哪些应用程序正在发送 UDP 数据包,因此我可能会遵循 QoS 类并在其他数据包(例如电子邮件)之前转发一些数据包(例如会话语音)。
为了识别协议,我应该使用 TCP 和 UDP 端口号列表吗?
【问题讨论】:
-
“我应该使用 TCP 和 UDP 端口号列表”:如果不(尝试)检查数据包的有效负载,您可能没有其他可能性。
标签: c sockets network-programming qos