(Ich habe die erweiterte Version dieser Funktion geschrieben, die die NETLINK-Daten entleert, nachdem Sasha Pachevs großartige Detektivarbeit herausgefunden hat, welche Funktion abgefangen werden soll. Ich bin froh, dass die Leute den Code für nützlich gehalten haben.)
Aus dem anderen Thread sehe ich, dass jemand "nm" verwendet hat, um herauszufinden, dass es einen analogen Callback-Handler für OSX gibt, und Sie versuchen, eine geeignete Funktion zu erstellen, um sie zu ersetzen. Ich verstehe, dass OSX überhaupt keine NETLINK-Schnittstelle bietet. Daher ist es sehr unwahrscheinlich, dass die OSX-Version von AnyConnect die Steuerung der Routing-Tabelle auf dieselbe Weise wie der Linux-Client übernimmt. Ich weiß nicht, welchen Mechanismus OSX anbietet, um AnyConnect zu signalisieren, dass eine Routing-Änderung erfolgt ist. Da es sich jedoch nicht um NETLINK-basierte Funktionen handelt, ist der hier verwendete Code zum Entleeren der Netlink-Nachricht nicht anwendbar.
Ironischerweise würde der ursprüngliche Stub-Funktionsstil von Sasha wahrscheinlich alles sein, was Sie benötigen, um zu verhindern, dass Ihre Routen durch eigene ersetzt werden. Diese Funktion sah wie folgt aus:
int __ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEv() { return 0; }
Unter Linux führte diese ursprüngliche Funktion zu einer hohen CPU-Auslastung, da das NETLINK-Ereignis, das den Aufruf des Callback-Handlers auslöste, niemals durch diesen Nichts-Code gelöscht werden würde. Der gleiche Effekt kann für den OSX-Client auftreten, bei dem das Ereignis, das beim Aufruf dieser Funktion ausgelöst wird, ebenfalls nicht gelöscht wird. Wenn diese Funktion jedoch die richtige Handler-Funktion zum Abfangen ist und Sie Ihre eigene Bibliothek so einrichten können, dass sie diese Funktion überschreibt und diese Bibliothek statt der echten geladen wird, müssen Sie zumindest die Routing-Tabelle jedes Mal zurücksetzen Mal versuchen Sie es selbst zu ändern. Wenn Sie so weit kommen, kann es sich lohnen, etwas CPU zu opfern.
Viel Glück!