Statischen ARP-Eintrag beim Booten hinzufügen

Ich bin neu bei Mac OS X. Unter Linux würde ich:

append to /etc/rc.local
arp -i eth0 -s 192.168.1.1 00:00:00:00:00:00

Ich habe herausgefunden, wie es im Terminal geht:

sudo arp -s 192.168.1.1 00:00:00:00:00:00

Aber ich möchte, dass dies vorzugsweise beim Booten automatisch geschieht. Muss ich bei der Verwendung auch eine Schnittstelle angeben arp?

Ich habe einige andere SE-Antworten gelesen, in denen launchd erwähnt wurde, aber ich habe keine Ahnung, was das ist.

Ich habe dieses books.google.com.au/… gefunden, weiß jemand, ob es /Library/StartupItemsnoch in Mavericks existiert?

Antworten (2)

Ich hatte große Probleme mit Matthieus Lösung, da sie auf meinem Mac OS X 10.9.2 zwei Probleme verursachte:

  1. Jobs im LaunchAgentsOrdner werden mit dem aktuellen Benutzer ausgeführt. arpMuss jedoch mit ausgeführt werden root.
  2. Der arp-Befehl wird zu früh ausgeführt, wenn das Netzwerk nicht aktiv ist. Aber das Netzwerk wird vom arp-Befehl benötigt.

Das erste Problem kann gelöst werden, indem die .plistDatei in LaunchDaemonsanstelle von LaunchAgents. Dadurch wird sichergestellt, dass der Befehl als root ausgeführt wird.

Das zweite Problem ist etwas knifflig. Da launchdAbhängigkeiten nicht behandelt werden, müssen wir ein eigenes Shell-Skript schreiben, das zuerst wartet, bis das Netzwerk hochgefahren ist, und dann den arpBefehl ausführt. (Siehe hier )

Hier ist also meine Lösung:
Erstellen/öffnen Sie zuerst die plist-Datei mit einem Texteditor:

sudo nano /Library/LaunchDaemons/local.arpentries.plist

Fügen Sie dann den folgenden Inhalt ein:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>local.arpentries</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/arpentries</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

Eigentümer festlegen etc.:

sudo chown root:wheel /Library/LaunchDaemons/local.arpentries.plist
sudo chmod 0644 /Library/LaunchDaemons/local.arpentries.plist

Erstellen/öffnen Sie nun das Shell-Skript mit einem Texteditor

sudo nano /usr/local/bin/arpentries

Fügen Sie Folgendes ein:

#!/bin/bash

# max number of retries
retries=10

# include Startup commons
. /etc/rc.common

# wait for network to become available
CheckForNetwork

while [ "$NETWORKUP" != "-YES-" ]
do
        retries=$((retries - 1))
        if [ $retries -le 0 ] ; then
                exit 1
        fi
        sleep 2
        NETWORKUP=
        CheckForNetwork
done

# set the static arp entries
arp -s 192.168.1.111 xx:xx:xx:xx:xx:xx

exit 0

Und die Rechte:

sudo chmod 0744 /usr/local/bin/arpentries 
Sie können auch crkurd verwenden, um die arp-Einträge jedes Mal zu setzen, wenn sich das Netzwerk ändert. Zu beachten ist, dass der PyMacAdmin-Download von Googlecode eine Ausnahme auslöst (zumindest auf meinem Mac OS). Die Verwendung des Quellcodes und des Installationsskripts von Github funktioniert jedoch einwandfrei.
Oh wow, damit habe ich immer noch zu kämpfen. Ich wollte es mit LaunchAgents und sudo NOPASSWD versuchen. Ich werde es versuchen.

Launchdist ein Daemon, der Daemons, Anwendungen, Prozesse und Skripte unter OSX startet, stoppt und verwaltet. Es soll den cron von Unix ersetzen.

Erstellen Sie eine neue .plistDatei:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>local.arpentry</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/arp</string>
        <string>-s</string>
        <string>192.168.1.1</string>
        <string>00:00:00:00:00:00</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>Nice</key>
    <integer>10</integer>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

Verschieben Sie dann Ihr neues .plistnach ~/Library/LaunchAgents, damit es jedes Mal geladen wird, wenn Sie sich bei Ihrer Sitzung anmelden, und führen Sie daher Ihren Befehl jedes Mal aus, wenn Sie sich anmelden.

Danke! Gibt es eine GUI für Plists oder etwas, das mir hilft, sie das nächste Mal zu erstellen?
~/Library/LaunchAgents existiert nicht, aber /Library/LaunchAgents schon
Bei jeder Anmeldung werden Jobs in ~/Library/LaunchAgentsausgeführt . Dieses Verzeichnis existiert bei einer Neuinstallation von OSX nicht und muss manuell erstellt werden. Jobs in werden ausgeführt, wenn sich ein Benutzer anmeldet. LaunchControl ist eine GUI für launchd/launchctl. /Library/LaunchAgents
Für diejenigen, die dies in Zukunft lesen, habe ich Folgendes gefunden: ptone.com/cron2launchd
Xcode hat eine integrierte GUI zum Bearbeiten/Erstellen von .plistDateien.
Ich habe es in /Library/LaunchAgents abgelegt, wie ich es beim Booten haben möchte, aber es scheint nicht zu funktionieren. arp -a zeigt den Eintrag nicht an. Muss ich es als Wurzel chown?
arp -s erfordert root/sudo, also denke ich, dass Sie bei der Anmeldung nicht ausgeführt werden können?
Wenn Sie es als root ausführen möchten, möchten Sie es möglicherweise als LaunchDaemon in hinzufügen /Library/LaunchDaemons. Daemons werden als Root ausgeführt, während Agents als Benutzer ausgeführt werden.
hmm, der arp-Eintrag ist beim Booten nicht vorhanden. Gibt es Protokolle, die ich überprüfen kann, die mir sagen könnten, was los ist?
Also habe ich die Konsole benutzt und "zweifelhafte Eigentumsrechte in den Akten" gefunden. Googeln wird jetzt eine Lösung melden.
sudo chown root:wheel <Dateiname>
Ich werde nach dem Neustart berichten, ob es behoben wurde.
Verdammt, habe es nicht behoben
com.apple.launchd[1]: (local.arpentry[81]) Beendet mit Code: 1
Ich habe dies heruntergearbeitet auf: arp: Schreiben an Routing-Socket: Datei existiert
geändert, um arp -S ip macjetzt arp zu erhalten: Schreiben an Routing-Socket: Kein solcher Prozess