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 hatte große Probleme mit Matthieus Lösung, da sie auf meinem Mac OS X 10.9.2 zwei Probleme verursachte:
LaunchAgents
Ordner werden mit dem aktuellen Benutzer ausgeführt. arp
Muss jedoch mit ausgeführt werden root
.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 .plist
Datei in LaunchDaemons
anstelle von LaunchAgents
. Dadurch wird sichergestellt, dass der Befehl als root ausgeführt wird.
Das zweite Problem ist etwas knifflig. Da launchd
Abhängigkeiten nicht behandelt werden, müssen wir ein eigenes Shell-Skript schreiben, das zuerst wartet, bis das Netzwerk hochgefahren ist, und dann den arp
Befehl 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
Launchd
ist 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 .plist
Datei:
<?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 .plist
nach ~/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.
~/Library/LaunchAgents
ausgefü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
.plist
Dateien./Library/LaunchDaemons
. Daemons werden als Root ausgeführt, während Agents als Benutzer ausgeführt werden.arp -S ip mac
jetzt arp zu erhalten: Schreiben an Routing-Socket: Kein solcher Prozess
Stefan
/Library/StartupItems
noch in Mavericks existiert?