我希望将连接套接字的端口和IP收集到网络内核扩展(NKE)中的套接字过滤器。
我尝试在sf_bind, sf_connect_in, sf_connect_out
的{{1}}回拨函数中收集它。
在struct sflt_filter
回调中。它指定为sf_bind(void *cookie,socket_t so,const struct sockaddr *to)
param"套接字的本地地址将绑定到"所以我使用了代码:
to
有时IP和端口都是空的,有时两者中的一个出现。
在我尝试使用代码的同一个和其他回调中:
printf("Local port:<%u> and IP<%04X>",
ntohs(((struct sockaddr_in *)to)->sin_port),
ntohs(((struct sockaddr_in*)to)->sin_addr.s_addr));
但是这段代码总是给IP和端口空。
有没有人有任何想法?还是另一种方式来获得它?提前谢谢。
答案 0 :(得分:0)
关于你的第一个代码片段:如果没有完整的回调代码示例,很难说出什么是错误的,但是你应该定义检查&#34;到#34;的sa_family字段。在尝试将sin_port和sin_addr打印为port和ip之前。
我认为你要找的值是AF_INET和AF_INET6。
关于你的第二个代码片段:你应该再次检查sa_family;
另外,在&#34;上调用sock_getsockname&#34;在绑定回调可能是错误的,因为&#34;回调&#34;在相关操作之前被调用,你不会为#34;所以&#34;填充sockaddr。
有tcplognke样本(曾经是Apple开发人员的资源,但他们并不擅长关注它们),你应该查看它们的例子。
有关于Apple计划制作NKE技术的信息deprecated soon,所以要小心使用它:)