2016-03-20 4 views
-1

Привет всем Я запускаю DD-WRT v.3.0 на моем маршрутизаторе Linksys EA6500, и у меня есть следующий скрипт, который позволяет мне получить доступ к MAC-адресу WiFi, который в настоящее время подключен к маршрутизатору:DD-WRT Сценарий оболочки Wifi IP и добавление имени

echo "#!/bin/ash" > /tmp/getmac.sh 
echo 'echo { > /tmp/www/list.html' >>/tmp/getmac.sh 
echo "for i in \$(arp | awk '{print toupper(\$4)}'); do echo \$i, >> /tmp/www/list.html; done" >>/tmp/getmac.sh 
echo 'echo } >> /tmp/www/list.html' >>/tmp/getmac.sh 
chmod +x /tmp/getmac.sh 
/tmp/getmac.sh 

я могу посетить http://192.168.1.1/user/list.html и покажет мне список WiFi MAC-адрес, который в данный момент подключен к маршрутизатору:

Пример:

{ 01:81:18:3d:49:5e, 04:10:87:8c:47:9a, } 

Тем не менее, я хотел бы изменить это, чтобы также включить адрес IP ADDRESS, а также НАЗВАНИЕ УСТРОЙСТВА.

Я нашел this на сайте DD-WRT, но при запуске команды и проверке каталога я ничего не вижу.

# mkdir -p /tmp/www 
while [ 1 ]; 
    do 
    wl assoclist | awk '{print tolower($2)}' > /tmp/assocLIST 
    # echo "<meta http-equiv="refresh" content="10"><b>Hostnames and IP addresses of WLAN clients</b> (last update: $(date))<p>" > /tmp/www/wlan.html 
    while read assocLINE 
    do 
    dumpleases | awk '/'"$assocLINE"'/ {print "Hostname: " $1, "MAC: " $2, "IP: " $3}' 
    # echo "<br>"; 
     done < /tmp/assocLIST  # >> /tmp/www/wlan.html 
    sleep 10; 
done; 

Я хотел бы, чтобы вывести следующим образом:

{ 
    "data": [{ 
     "IP": "192.168.1.55", 
     "MAC": "01:81:18:3d:49:5e", 
     "HOST": "DavidsAndroidPhone" 
    }, { 
     "IP": "192.168.1.79", 
     "MAC": "04:10:87:8c:47:9a", 
     "HOST": "BobsIphone" 
    }] 
} 

Может ли мне помочь в изменении моего первого сценария я отправил включить IP и NAME?

UPDATE

Когда я делаю команду агр в PuTTYtel я получаю следующую информацию:

DD-WRT login: root 
Password: 
========================================================== 

    ___ ___  _  _____ ______  ____ ___ 
    /_ \/ _ \___| | /|// _ \/_ __/ _ __|_// _ \ 
////// /___/ |/ |//, _/// | |/ //_ <_/ ///
    /____/____/ |__/|__/_/|_| /_/ |___/____(_)___/ 

         DD-WRT v3.0 
        http://www.dd-wrt.com 

========================================================== 


BusyBox v1.24.1 (2016-03-07 05:09:22 CET) built-in shell (ash) 

[email protected]:~# arp 
android-17af243062d3eb6b (192.168.1.144) at 00:ae:fa:4a:3a:4c [ether] on br0 

Так в настоящее время сценарий я бегу (getmac.sh) смотрит на это и получает только это:

{ 00:ae:fa:4a:3a:4c, } 

Так что, учитывая, что, как я могу изменить сценарий, чтобы получить больше информацию, которую я ищу в правильной компоновке JSON?

UPDATE 2

Ok У меня есть этот код здесь:

arp | awk 'BEGIN { print "{" } { print "MAC:" $4 ", IP:" $2 ", HOST:" $1} END { print "}" }' 

которая выводит следующее:

{ 
MAC:00:ae:fa:4a:3a:4c, IP:(192.168.1.144), HOST:android-17af243062d3eb6b 
} 

Теперь, учитывая, что выше, как я могу удалить ( и ) от IP и отформатировать его в опоре форма JSON? Я пробовал awk -F '(', но это не работает.

+0

Э-э, почему вы генерируете сценарий каждый раз? На ваш вопрос было бы намного проще ответить, если бы вы просто разместили сгенерированный скрипт, независимо. – tripleee

+0

Сценарий с сайта будет генерировать файл '/ tmp/www/wlan.html', если вы раскомментировали эти строки. – tripleee

+0

... Хотя это немного неуклюжий с временным файлом. Без выборочного вывода из 'wl assoclist' и' getleases' не совсем понятно, что он делает. – tripleee

ответ

1

Во-первых, ваш текущий скрипт содержит невероятное количество трещин.Это может быть переработано только

arp | awk 'BEGIN { print "{" } { print toupper($4) } END { print "}" }' 

Без доступа к выходу из dumpleases мы не можем сказать вам, как добавить разрешение IP-адрес, но arp -n от многих дистрибутивов Linux возвращает IP-адрес в $1, и вы получите разрешенный адрес (если есть) без -n. Но, глядя на сценарий с веб-сайта, все, что вам нужно, вероятно, действительно dumpleases. Сценарий с веб-сайта может быть переработан в

while true # fix silly [ 1 ] 
do 
    wl assoclist | awk '{print tolower($2)}' > /tmp/assocLIST 
    dumpleases | awk 'NR==FNR { a[$1]++; next } 
     $2 in a { print s "{"; print "\"Hostname\": \"" $1 "\"; 
     gsub("()", "", $2); print "\"MAC\": "\""" $2 "\""; 
     print "\"IP\": \"" $3 "\""; print "}"; s=",\n" }' /tmp/assocLIST - 
done 

и если вы не заботитесь о wl assoclist части или бесконечной петли, все, что вам кажется, нужно реорганизовать dumpleases вывод в формате JSON. Это часть после $2 in a в приведенном выше скрипте. (Я взял на себя MAC-адрес является то, что wl assoclist производит, без выходных образцов, я просто угадать много вещей здесь.)


Что касается генерации скрипта на лету, это просто глупо. Все, что (я предполагаю, немного здесь) выглядит

ssh busybox "echo 'echo moo' >/tmp/script 
    chmod +x /tmp/script 
    /tmp/script" 

может быть переписано без потери функциональности, как только

ssh busybox 'echo moo' 

(и для чего это стоит, если сценарий не был так бесполезно, я определенно рекомендовал бы переписать его, чтобы вместо этого использовать здесь документ).

+0

для ** в то время как true ** он постоянно говорит ** не может открыть входной файл: Нет такого файла или каталога ** – StealthRT

+0

Забыл ли вы shebang, или вы положили неразрывное пространство? – tripleee

+0

См. Обновление для правильных котировок JSON и обрезанных парсеров из поля IP-адреса. – tripleee

0

Если вы заинтересованы в JSON отформатированные версии: с

для этого DD-WRT формате агр:

[email protected]:~# arp 
myhost1.mysite.com (192.168.2.12) at 08:0b:05:04:08:04 [ether] on br0 
myhost2.mysite.com (192.168.2.21) at 18:1b:15:14:18:14 [ether] on br0 ... 

Следующая команда:

arp | awk 'BEGIN { print "[" } {gsub(/[\(\)]/,""); print " {\"MAC\": \"" $4 "\",\n \"IP\": \"" $2 "\",\n \"Address\": \"" $1 "\",\n \"Iface\": \"" $7 "\"},"} END { print "]" }' 

Возвращает:

[ 
    {"MAC": "08:0b:05:04:08:04", 
    "IP": "192.168.10.12", 
    "Address": "myhost1.mysite.com", 
    "Iface": "br0"}, 
    {"MAC": "18:1b:15:14:18:14", 
    "IP": "192.168.10.21", 
    "Address": "myhost2.mysite.com", 
    "Iface": "br0"}, 
] 

 Смежные вопросы

  • Нет связанных вопросов^_^