DD-WRT Shell 脚本 Wifi IP 和名称添加
DD-WRT Shell script Wifi IP and Name addition
大家好我是 运行 我的 Linksys EA6500 路由器上的 DD-WRT v.3.0 我有以下脚本 运行 以便让我访问 WiFi MAC当前连接到路由器的地址:
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 地址 以及 设备名称。
我在 DD-WRT 网站上找到 this 但是当 运行 命令和检查目录时,我没有在任何地方看到它。
# mkdir -p /tmp/www
while [ 1 ];
do
wl assoclist | awk '{print tolower()}' > /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: " , "MAC: " , "IP: " }'
# 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?
更新
当我在 PuTTYtel 中执行命令 arp 时,我得到以下信息:
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)
root@DD-WRT:~# 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 布局中获取更多我正在寻找的信息?
更新 2
好的,我这里有这段代码:
arp | awk 'BEGIN { print "{" } { print "MAC:" ", IP:" ", HOST:" } END { print "}" }'
输出如下:
{
MAC:00:ae:fa:4a:3a:4c, IP:(192.168.1.144), HOST:android-17af243062d3eb6b
}
鉴于上述情况,我如何从 IP 中删除 ( 和 ) 并将其格式化为正确的 JSON形式?我试过 awk -F'(' 但这似乎不起作用。
首先,您当前的脚本包含大量的废话。它可以重构为
arp | awk 'BEGIN { print "{" } { print toupper() } END { print "}" }'
如果无法访问 dumpleases
的输出,我们无法真正告诉您如何添加 IP 地址解析,但是 arp -n
在许多 Linux returns 中 </code>,你得到没有<code>-n
的解析地址(如果有的话)。但是从网站上看脚本,你想要的可能真的是dumpleases
。来自网站的脚本可以重构为
while true # fix silly [ 1 ]
do
wl assoclist | awk '{print tolower()}' > /tmp/assocLIST
dumpleases | awk 'NR==FNR { a[]++; next }
in a { print s "{"; print "\"Hostname\": \"" "\";
gsub("()", "", ); print "\"MAC\": "\""" "\"";
print "\"IP\": \"" "\""; print "}"; s=",\n" }' /tmp/assocLIST -
done
如果您不关心 wl assoclist
部分或无限循环,您似乎只需要将 dumpleases
输出重构为 JSON。那是上面脚本中 in a
之后的部分。 (我假设 MAC 地址是 wl assoclist
产生的;没有输出样本,我只需要在这里猜测很多东西。)
至于即时生成脚本,那是愚蠢的。任何(我在这里再次猜测)看起来像
ssh busybox "echo 'echo moo' >/tmp/script
chmod +x /tmp/script
/tmp/script"
可以在不损失任何功能的情况下重写,就像
ssh busybox 'echo moo'
(就其价值而言,如果脚本不是那么无用,我肯定会建议重写它以使用此处的文档)。
如果对 JSON 格式的版本感兴趣:
对于这种 DD-WRT arp 格式:
root@myrouter:~# 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\": \"" "\",\n \"IP\": \"" "\",\n \"Address\": \"" "\",\n \"Iface\": \"" "\"},"} END { print "]" }'
Returns:
[
{"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"},
]
大家好我是 运行 我的 Linksys EA6500 路由器上的 DD-WRT v.3.0 我有以下脚本 运行 以便让我访问 WiFi MAC当前连接到路由器的地址:
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 地址 以及 设备名称。
我在 DD-WRT 网站上找到 this 但是当 运行 命令和检查目录时,我没有在任何地方看到它。
# mkdir -p /tmp/www
while [ 1 ];
do
wl assoclist | awk '{print tolower()}' > /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: " , "MAC: " , "IP: " }'
# 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?
更新
当我在 PuTTYtel 中执行命令 arp 时,我得到以下信息:
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)
root@DD-WRT:~# 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 布局中获取更多我正在寻找的信息?
更新 2
好的,我这里有这段代码:
arp | awk 'BEGIN { print "{" } { print "MAC:" ", IP:" ", HOST:" } END { print "}" }'
输出如下:
{
MAC:00:ae:fa:4a:3a:4c, IP:(192.168.1.144), HOST:android-17af243062d3eb6b
}
鉴于上述情况,我如何从 IP 中删除 ( 和 ) 并将其格式化为正确的 JSON形式?我试过 awk -F'(' 但这似乎不起作用。
首先,您当前的脚本包含大量的废话。它可以重构为
arp | awk 'BEGIN { print "{" } { print toupper() } END { print "}" }'
如果无法访问 dumpleases
的输出,我们无法真正告诉您如何添加 IP 地址解析,但是 arp -n
在许多 Linux returns 中 </code>,你得到没有<code>-n
的解析地址(如果有的话)。但是从网站上看脚本,你想要的可能真的是dumpleases
。来自网站的脚本可以重构为
while true # fix silly [ 1 ]
do
wl assoclist | awk '{print tolower()}' > /tmp/assocLIST
dumpleases | awk 'NR==FNR { a[]++; next }
in a { print s "{"; print "\"Hostname\": \"" "\";
gsub("()", "", ); print "\"MAC\": "\""" "\"";
print "\"IP\": \"" "\""; print "}"; s=",\n" }' /tmp/assocLIST -
done
如果您不关心 wl assoclist
部分或无限循环,您似乎只需要将 dumpleases
输出重构为 JSON。那是上面脚本中 in a
之后的部分。 (我假设 MAC 地址是 wl assoclist
产生的;没有输出样本,我只需要在这里猜测很多东西。)
至于即时生成脚本,那是愚蠢的。任何(我在这里再次猜测)看起来像
ssh busybox "echo 'echo moo' >/tmp/script
chmod +x /tmp/script
/tmp/script"
可以在不损失任何功能的情况下重写,就像
ssh busybox 'echo moo'
(就其价值而言,如果脚本不是那么无用,我肯定会建议重写它以使用此处的文档)。
如果对 JSON 格式的版本感兴趣:
对于这种 DD-WRT arp 格式:
root@myrouter:~# 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\": \"" "\",\n \"IP\": \"" "\",\n \"Address\": \"" "\",\n \"Iface\": \"" "\"},"} END { print "]" }'
Returns:
[
{"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"},
]