/-6ren">
gpt4 book ai didi

linux - DD-WRT Shell脚本Wifi IP和名称添加

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:58 25 4
gpt4 key购买 nike

大家好,我在 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 地址以及设备名称

我找到了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"
}]
}

有人可以帮我修改我发布的第一个脚本以包含IPNAME吗?

更新

当我在 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:" $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'(' 但这似乎不起作用。

最佳答案

首先,您当前的脚本包含大量的垃圾。它可以重构为只是

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

如果无法访问 dumpleases 的输出,我们无法真正告诉您如何添加 IP 地址解析,但许多 Linux 上的 arp -n 会返回 $1 中的 IP 地址,并且您无需使用 -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'

(就其值(value)而言,如果脚本不是那么无用,我肯定会建议重写它以使用此处的文档)。

关于linux - DD-WRT Shell脚本Wifi IP和名称添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com