2016-11-19 9 views
0

Привет всем У меня есть следующий BASH скрипт работает при запуске на моем WRT1900ac linksy с:DD-WRT Bash скрипт под вопросом запуска

USER="admin" 
PASS="passhere" 
PROTOCOL="http" 
ROUTER_IP="192.168.1.1" 

# Port to connect to which will provide the JSON data. 
PORT=9898 

while [ 1 ] 
do 
    # Grab connected device MAC addresses through router status page. 
    MACS=$(curl -s --user $USER:$PASS $PROTOCOL://$ROUTER_IP/Status_Wireless.live.asp) 

    # clear temp JSON file 
    echo > temp.log 

    # Get hostname and IP (just in case there is no hostname). 
    for MAC in $(echo $MACS | grep -oE "wl_mac::[a-z0-9]{2}:[a-z0-9]{2}:[a-z0-9]{2}:[a-z0-9]{2}:[a-z0-9]{2}:[a-z0-9]{2}" | cut -c 9-); 
    do 
     grep 0x /proc/net/arp | awk '{print $1 " " $4}' | while IFS= read -r line 
     do 
     IP=$(echo $line | cut -d' ' -f1) 
     MACTEMP=$(echo $line | cut -d' ' -f2) 
     HOST=$(arp -a | grep $IP | cut -d' ' -f1) 

     # if no hostname exists, just use IP. 
     if [ "$HOST" == "" ] 
     then 
      HOST=$IP 
     fi 

     if [ "$MAC" == "$MACTEMP" ] 
     then 
      JSON="{'hostname' : '$HOST', 'mac_address' : '$MAC'}" 
      echo $JSON >> temp.log 
     fi 

     done 
    done 

    # Provide the JSON formatted output on $PORT of router. 
    # This allows one connection before closing the port (connect, receive data, close). 
    # Port will reopen every 5 minutes with new data as setup in a cron job. 
    echo -e "HTTP/1.1 200 OK\n\n $(cat temp.log)" | nc -l -p$PORT >/dev/null 

    # Wait for 10 seconds and do it all over. 
    sleep 10 

done 

И по какой-то причине, когда я перезагрузить маршрутизатор, а затем попробуйте посетить http://192.168.1.1:9898 он просто показывает пустую страницу, хотя у меня есть мобильный телефон Android, подключенный через Wi-Fi к маршрутизатору, и маршрутизатор показывает MAC-адрес на странице состояния.

Что должно быть на этой странице, все беспроводные MAC-адрес, который в настоящее время подключены к маршрутизатору и отображать их в JSON формы.

Любой BASH Здесь находится гуру, который может помочь выявить проблему?

+0

как запустить этот скрипт при запуске? rc.local? Если да, пожалуйста, разместите содержимое rc.local или разместите там этот скрипт прямо там? – zabeltech

+0

@zabeltech Я запустил его, перейдя на вкладку ** Администрирование> команда ** и сохранив его в качестве ** сценария запуска **. Это похоже на графический интерфейс http://www.octanevpn.com/media/wysiwyg/ddwrt3.png – StealthRT

+2

Сначала вы должны отладить это, прежде чем запускать его как сценарий запуска. См. [Как отладить скрипт bash?] (Http://stackoverflow.com/q/951336/1741542) для получения справки. –

ответ

0

Я думаю, что это должно быть

echo -e "HTTP/1.1 200 OK\n\n $(cat temp.log)" | nc -l -p$PORT 0.0.0.0 >/dev/null

+0

Выполняя эту команду в SSH на маршрутизаторе, я получаю ошибку ** cat: не могу открыть «temp.log»: нет такого файла или каталога ** – StealthRT

+0

да, потому что temp.log написан вашим скриптом, если вы выполните приведенную выше команду, она, безусловно, потерпит неудачу. так как вы все равно в ssh, попробуйте запустить весь скрипт и посмотреть, что он вам скажет/или опубликовать здесь. – zabeltech

+0

Как вставить весь скрипт в окна с помощью ** PuTTY **? – StealthRT