Aggiungi voce statica ARP all'avvio

4

Sono nuovo di Mac OS X. Su Linux vorrei:

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

Ho capito come farlo in Terminal:

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

Ma mi piacerebbe che succedesse automaticamente preferibilmente all'avvio. Devo anche specificare un'interfaccia quando si utilizza arp ?

Ho letto alcune altre risposte SE che hanno menzionato launchd, ma non ho idea di cosa sia.

    
posta Steven 05.03.2014 - 23:43
fonte

2 risposte

2

Ho faticato molto con la soluzione di Matthieu poiché causava due problemi al mio Mac OS X 10.9.2:

  1. I lavori nella cartella LaunchAgents vengono eseguiti utilizzando l'utente corrente. Tuttavia arp deve essere eseguito utilizzando root .
  2. Il comando arp viene eseguito troppo presto, quando la rete non è attiva. Ma la rete è necessaria per il arp -comando.

Il primo problema può essere risolto memorizzando il file .plist in LaunchDaemons anziché LaunchAgents . Ciò assicurerà che il comando sia eseguito come root.

Il secondo problema è un po 'complicato. Poiché launchd non gestisce le dipendenze, dobbiamo scrivere il nostro script di shell che prima attende fino a quando la rete è su e poi esegue il comando arp . (Vedi here )

Quindi ecco la mia soluzione:
Prima crea / apri il file plist usando un editor di testo:

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

Quindi incolla il seguente contenuto:

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

Imposta proprietario ecc.:

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

Ora crea / apri lo script della shell usando un editor di testo

sudo nano /usr/local/bin/arpentries

Incolla quanto segue:

#!/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

E i diritti:

sudo chmod 0744 /usr/local/bin/arpentries 
    
risposta data 15.04.2014 - 19:44
fonte
1

Launchd è un daemon che avvia, arresta e gestisce daemon, applicazioni, processi e script su OSX. È inteso per sostituire unix 'cron.

Crea un nuovo file .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>

Quindi sposta il nuovo .plist in ~/Library/LaunchAgents in modo che venga caricato ogni volta che accedi alla sessione e quindi esegui il comando ogni volta che accedi.

    
risposta data 06.03.2014 - 01:00
fonte

Leggi altre domande sui tag