Agregar entrada ARP estática en el arranque

4

Soy nuevo en Mac OS X. En Linux yo:

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 sucediera automáticamente, preferiblemente en el arranque. ¿También debo especificar una interfaz cuando uso arp ?

Leí algunas otras respuestas de SE que mencionaron launchd, pero no tengo idea de qué es eso.

    
pregunta Steven 05.03.2014 - 23:43

2 respuestas

2

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

  1. Los trabajos en la carpeta LaunchAgents se ejecutan usando el usuario actual. Sin embargo, arp debe ejecutarse utilizando root .
  2. El comando arp se ejecuta demasiado pronto, cuando la red no está activa. Pero la red es necesaria por el comando arp .

El primer problema se puede resolver almacenando el archivo .plist en LaunchDaemons en lugar de LaunchAgents . Esto asegurará que el comando se ejecute como root.

El segundo problema es un poco complicado. Como launchd no maneja las dependencias, tenemos que escribir nuestro propio script de shell que primero espera hasta que la red esté funcionando y luego ejecute el comando arp . (Vea aquí )

Así que aquí está mi solución:
Primero crea / abre el archivo plist usando un editor de texto:

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

Luego pega 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 con 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 
    
respondido por el Biggie 15.04.2014 - 19:44
1

Launchd es un demonio que inicia, detiene y administra demonios, aplicaciones, procesos y scripts en OSX. Está destinado a reemplazar el cron de Unix.

Crea un nuevo archivo .plist :

<?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.

    
respondido por el Matthieu Riegler 06.03.2014 - 01:00

Lea otras preguntas en las etiquetas