gpt4 book ai didi

bash - 使用 Bash 解析 dhcpd.lease 文件

转载 作者:行者123 更新时间:2023-11-29 09:45:20 28 4
gpt4 key购买 nike

我尝试使用 Basel 解析我的 dhcpd.lease 文件。典型的条目如下所示:

lease 192.168.20.4 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 00:00:00:00:00:00;
uid 00:00:00:00:00:00;
client-hostname "examle-workstation1";
}

我得到的所有信息都是 MAC,我想要的是 IP 和客户端主机名。但也许,没有客户端主机名。该条目如下所示:

lease 192.168.20.5 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 00:00:00:00:00:00;
}

我的第一个想法是 grep 租用属性、硬件以太网属性和 uid 属性,并将它们全部放在一行中。然后解析它。

但我的问题是,我有一个大文件,在许多文件中分配了很多条目。这棵树看起来像这样:

dhcpd-leases
-- 192.168.20.0
-- 192.168.30.0
-- 192.168.40.0
[...]

我得到的所有信息都是从另一个文件解析到列表中的 MAC。所以我从这个列表开始,想用我的 MAC grep 属性 ip、ma​​c:

for ENTRY in $MACLIST
do
VAR$(cat "dhcpd-leases/10.148.$NETWORK.2/dhcpd.leases" | grep -E "$MAC|lease|client-hostname")
echo $VAR
done

但由于 $VAR 中的许多条目,我无法正确解析文件。

有人可以帮忙吗?

最好的问候彼得

最佳答案

假设您的 maclist 文件看起来像这样(例如只有一个条目)

$ cat maclist
00:00:00:00:00:01

和你的租约文件是这样的

$ cat file
lease 192.168.20.4 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 00:00:00:00:00:00;
uid 00:00:00:00:00:00;
client-hostname "examle-workstation1";
}

lease 192.168.20.5 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 00:00:00:00:00:00;
}

lease 192.168.20.6 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 00:00:00:00:00:01;
uid 00:00:00:00:00:01;
client-hostname "examle-workstation2";
}


lease 192.168.20.7 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 01:00:00:00:00:00;
}

你可以试试这个

awk 'BEGIN{
while( (getline line < "maclist") > 0){
mac[line]
}
RS="}"
FS="\n"
}
/lease/{
for(i=1;i<=NF;i++){
gsub(";","",$i)
if ($i ~ /lease/) {
m=split($i, IP," ")
ip=IP[2]
}
if( $i ~ /hardware/ ){
m=split($i, hw," ")
ether=hw[3]
}
if ( $i ~ /client-hostname/){
m=split($i,ch, " ")
hostname=ch[2]
}
if ( $i ~ /uid/){
m=split($i,ui, " ")
uid=ui[2]
}
}
if ( ether in mac ){
print "ip: "ip " hostname: "hostname " ether: "ether " uid: "uid
}
} ' file

输出

$ ./shell.sh
hostname: "examle-workstation2" ether: 00:00:00:00:00:01 uid: 00:00:00:00:00:01

关于bash - 使用 Bash 解析 dhcpd.lease 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142824/

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