Soy nuevo en Mac OS X. En Linux:
append to /etc/rc.local
arp -i eth0 -s 192.168.1.1 00:00:00:00:00:00
He descubierto cómo hacerlo en la Terminal:
sudo arp -s 192.168.1.1 00:00:00:00:00:00
Pero me gustaría que esto suceda automáticamente, preferiblemente en el arranque. ¿ También necesito especificar una interfaz cuando uso arp
?
Leí algunas otras respuestas de SE que mencionaron el lanzamiento, pero no tengo idea de qué es eso.
Luché mucho con la solución de Matthieu ya que causó dos problemas en mi Mac OS X 10.9.2:
LaunchAgents
carpeta se ejecutan utilizando el usuario actual. Sin embargo, arp
debe ejecutarse usando root
.arp
comando - se ejecuta demasiado pronto, cuando la red no está activa. Pero la red es necesaria para el arp
comando.El primer problema se puede resolver almacenando el .plist
archivo en LaunchDaemons
lugar de LaunchAgents
. Esto asegurará que el comando se ejecute como root.
El segundo problema es un poco complicado. Dado que launchd
no maneja dependencias, tenemos que escribir nuestro propio script de shell que primero espera hasta que la red esté activa y luego ejecuta el arp
comando. (Ver aquí )
Así que aquí está mi solución:
primero cree/abra el archivo plist usando un editor de texto:
sudo nano /Library/LaunchDaemons/local.arpentries.plist
Luego pegue el siguiente contenido:
<?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>
Establecer propietario, etc.:
sudo chown root:wheel /Library/LaunchDaemons/local.arpentries.plist
sudo chmod 0644 /Library/LaunchDaemons/local.arpentries.plist
Ahora cree/abra el script de shell usando un editor de texto
sudo nano /usr/local/bin/arpentries
Pegue lo siguiente:
#!/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
Y los derechos:
sudo chmod 0744 /usr/local/bin/arpentries
Launchd
es un demonio que inicia, detiene y administra demonios, aplicaciones, procesos y scripts en OSX. Está destinado a reemplazar el cron de Unix.
Crear un nuevo .plist
archivo:
<?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>
Luego mueva su nuevo .plist
a ~/Library/LaunchAgents
para que se cargue cada vez que inicie sesión en su sesión y, por lo tanto, ejecute su comando cada vez que inicie sesión.
~/Library/LaunchAgents
ejecutarán cada vez que inicie sesión. Este directorio no existe en una instalación nueva de OSX y debe crearse manualmente. Los trabajos /Library/LaunchAgents
se ejecutarán cada vez que un usuario inicie sesión. LaunchControl es una GUI para launchd/launchctl..plist
archivos./Library/LaunchDaemons
. Los demonios se ejecutan como raíz, mientras que los agentes se ejecutan como usuario.arp -S ip mac
obtener ahora arp: escribir en el socket de enrutamiento: no existe tal proceso
steven
/Library/StartupItems
todavía existe en Mavericks?