我正在尝试找到一种解决方案,以允许与 OSX 的 Cisco AnyConnect 客户端进行拆分隧道。我已经找到了它是如何修改防火墙的,并且可以修复。然而,问题是vpnagentd守护进程不断劫持路由表。
Sasha Pachev 为 Linux ( https://superuser.com/a/546668/568559 )提出了一个优雅的解决方案,但是我在使其适应 OSX 方面遇到了挑战。
为 Linux 编写的hack.c引用了linux/netlink.h,它在 OSX 上不存在。我认为这就是AF_NETLINK 的来源。
#include <sys/socket.h>
#include <linux/netlink.h>
int __ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEv()
{
int fd=50; // max fd to try
char buf[8192];
struct sockaddr_nl sa;
socklen_t len = sizeof(sa);
while (fd) {
if (!getsockname(fd, (struct sockaddr *)&sa, &len)) {
if (sa.nl_family == AF_NETLINK) {
ssize_t n = recv(fd, buf, sizeof(buf), MSG_DONTWAIT);
}
}
fd--;
}
return 0; …
Run Code Online (Sandbox Code Playgroud)