Agregar entrada ARP estática en el arranque

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.

Encontré este books.google.com.au/... ¿alguien sabe si /Library/StartupItemstodavía existe en Mavericks?

Respuestas (2)

Luché mucho con la solución de Matthieu ya que causó dos problemas en mi Mac OS X 10.9.2:

  1. Los trabajos en la LaunchAgentscarpeta se ejecutan utilizando el usuario actual. Sin embargo, arpdebe ejecutarse usando root.
  2. El arpcomando - se ejecuta demasiado pronto, cuando la red no está activa. Pero la red es necesaria para el arpcomando.

El primer problema se puede resolver almacenando el .plistarchivo en LaunchDaemonslugar de LaunchAgents. Esto asegurará que el comando se ejecute como root.

El segundo problema es un poco complicado. Dado que launchdno maneja dependencias, tenemos que escribir nuestro propio script de shell que primero espera hasta que la red esté activa y luego ejecuta el arpcomando. (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 
También puede usar crankd para configurar las entradas de arp cada vez que cambia la red. Una cosa a tener en cuenta es que la descarga de PyMacAdmin desde googlecode arroja una excepción (al menos en mi Mac OS). Sin embargo, usar el código fuente y el script de instalación de Github funciona bien.
Oh wow, he estado luchando con esto todavía. Iba a probar con LaunchAgents y sudo NOPASSWD. Le daré una oportunidad.

Launchdes 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 .plistarchivo:

<?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 .plista ~/Library/LaunchAgentspara 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.

¡Gracias! ¿Hay una GUI para plists o algo que me ayude a hacerlas la próxima vez?
~/Library/LaunchAgents no existe pero /Library/LaunchAgents sí
Los trabajos se ~/Library/LaunchAgentsejecutará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/LaunchAgentsse ejecutarán cada vez que un usuario inicie sesión. LaunchControl es una GUI para launchd/launchctl.
Para aquellos que lean esto en el futuro, encontré esto: ptone.com/cron2launchd
Xcode tiene una GUI integrada para editar/crear .plistarchivos.
Lo puse en /Library/LaunchAgents como quiero que suceda en el arranque, pero parece que no funciona. arp -a no muestra la entrada. ¿Necesito chown como root?
arp -s requiere root/sudo, así que creo que no puedes ejecutar al iniciar sesión.
Si desea ejecutarlo como root, es posible que desee agregarlo como LaunchDaemon en /Library/LaunchDaemons. Los demonios se ejecutan como raíz, mientras que los agentes se ejecutan como usuario.
hmm, la entrada arp no está presente en el arranque. ¿Hay registros que pueda verificar que me digan qué está pasando?
Entonces usé la consola y encontré "propiedad dudosa en el archivo". Buscar en Google ahora informará sobre una solución.
sudo chown root:rueda <nombre de archivo>
Informaré cuando reinicie si eso lo solucionó.
maldición, no lo arreglé
com.apple.launchd[1]: (local.arpentry[81]) Salió con el código: 1
He reducido esto a: arp: escribiendo en el socket de enrutamiento: el archivo existe
cambiado para arp -S ip macobtener ahora arp: escribir en el socket de enrutamiento: no existe tal proceso