注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 可扩展、高可用、负载均衡..
 帮助

从dhcpd.lease中提取MAC和IP地址.


2008-01-10 22:17:26
 标签:ip mac 地址 dhcpd.lease   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://coolerfeng.blog.51cto.com/133059/58773
从DHCP的log中提取MAC和IP地址.
/var/lib/dhcpd/dhcp.lease中的一段记录如下:


lease 192.168.1.238 {
  starts 0 2007/11/25 11:57:41;
  ends 0 2007/11/25 17:57:41;
  tstp 0 2007/11/25 17:57:41;
  binding state free;
  hardware ethernet 00:0c:29:ac:4e:01;
  uid "\377eth0\000\001\000\001\016\354\015J\000\014)\254N\001";
}
 
 
# cat dhcpd.leases | egrep 'lease|hardware' | sed 's/lease//g' | sed 's/{//g' | sed 's/hardware ethernet//g
 
 
网友给的办法.测试了一下.重复的较多.主要是出现了.同一个MAC多次获取不同的IP地址的情况
cat dhcpd.leases|awk 'BEGIN{RS=ORS="}"}{print $2,$21,"\n"}'

或者
awk 'BEGIN{RS=ORS="}"}{print $2,$21,"\n"}' dhcpd.leases
解释:
 RS 输入的记录他隔符 新行
ORS 输出的记录分隔符 新行
从头查找,遇到}结束,显示第2和第21个字段.ip在第2个字段.mac在第21个字段.
这样出来的结果基本符合我们的要求.
All so
}192.168.1.250 00:0c:29:ac:4e:01;
}192.168.1.238 00:0c:29:ac:4e:01;
}192.168.1.241 00:0c:29:ac:4e:01;
}192.168.1.246 00:0c:29:ac:4e:01;
}192.168.1.248 00:0c:29:ac:4e:01;
}192.168.1.251 00:0c:29:05:ac:8a;
}192.168.1.253 00:0c:29:c2:b3:44;
}192.168.1.247 00:0a:eb:f3:39:dd;
}192.168.1.254 00:0c:29:c2:b3:44;
}192.168.1.249 00:0c:29:a8:c7:0a;
}192.168.1.245 00:0c:29:79:e2:aa;
}192.168.1.244 00:0c:29:79:e2:aa;
}192.168.1.243 00:0c:29:9d:e8:d8;
}192.168.1.240 00:0c:29:a8:59:21;
}192.168.1.242 00:0c:29:9d:e8:d8;
}192.168.1.239 00:16:d3:b6:1b:d2;
缺点就是第一行多了All so 每一行多了},也就是说我们要把这个结果再处理一下.
去掉第一行和最后一行,并把它排序.
改进一下命令,由于dhcpd.lease前面7行都是注释的内容,我们跳过这些行
tail -n +8 dhcpd.lease  

从第8行开始显示dhcpd.lease文件
 
#tail -n +8 dhcpd.leases|less|awk 'BEGIN{RS=ORS="}"}{print $2,$21,"\n"}'
192.168.1.252 00:0c:29:ac:4e:01;
}192.168.1.250 00:0c:29:ac:4e:01;
}192.168.1.238 00:0c:29:ac:4e:01;
}192.168.1.241 00:0c:29:ac:4e:01;
}192.168.1.246 00:0c:29:ac:4e:01;
}192.168.1.248 00:0c:29:ac:4e:01;
}192.168.1.251 00:0c:29:05:ac:8a;
}192.168.1.253 00:0c:29:c2:b3:44;
}192.168.1.247 00:0a:eb:f3:39:dd;
}192.168.1.254 00:0c:29:c2:b3:44;
}192.168.1.249 00:0c:29:a8:c7:0a;
}192.168.1.245 00:0c:29:79:e2:aa;
}192.168.1.244 00:0c:29:79:e2:aa;
}192.168.1.243 00:0c:29:9d:e8:d8;
}192.168.1.240 00:0c:29:a8:59:21;
}192.168.1.242 00:0c:29:9d:e8:d8;
}192.168.1.239 00:16:d3:b6:1b:d2;
现在还有该死的},我们用sed命令把它替换掉.
sed 's/}//g'  

替换所有的}为空
#tail -n +8 dhcpd.leases|less|awk 'BEGIN{RS=ORS="}"}{print $2,$21,"\n"}'|sed 's/}//g'
 
 
192.168.1.252 00:0c:29:ac:4e:01;
192.168.1.250 00:0c:29:ac:4e:01;
192.168.1.238 00:0c:29:ac:4e:01;
192.168.1.241 00:0c:29:ac:4e:01;
192.168.1.246 00:0c:29:ac:4e:01;
192.168.1.248 00:0c:29:ac:4e:01;
192.168.1.251 00:0c:29:05:ac:8a;
192.168.1.253 00:0c:29:c2:b3:44;
192.168.1.247 00:0a:eb:f3:39:dd;
192.168.1.254 00:0c:29:c2:b3:44;
192.168.1.249 00:0c:29:a8:c7:0a;
192.168.1.245 00:0c:29:79:e2:aa;
192.168.1.244 00:0c:29:79:e2:aa;
192.168.1.243 00:0c:29:9d:e8:d8;
192.168.1.240 00:0c:29:a8:59:21;
192.168.1.242 00:0c:29:9d:e8:d8;
192.168.1.239 00:16:d3:b6:1b:d2;
 
我们再把结果排序一下,让它看上去舒服一些.
#tail -n +8 dhcpd.leases|less|awk 'BEGIN{RS=ORS="}"}{print $2,$21,"\n"}'|sed 's/}//g'|sort -n

192.168.1.238 00:0c:29:ac:4e:01;
192.168.1.239 00:16:d3:b6:1b:d2;
192.168.1.240 00:0c:29:a8:59:21;
192.168.1.241 00:0c:29:ac:4e:01;
192.168.1.242 00:0c:29:9d:e8:d8;
192.168.1.243 00:0c:29:9d:e8:d8;
192.168.1.244 00:0c:29:79:e2:aa;
192.168.1.245 00:0c:29:79:e2:aa;
192.168.1.246 00:0c:29:ac:4e:01;
192.168.1.247 00:0a:eb:f3:39:dd;
192.168.1.248 00:0c:29:ac:4e:01;
192.168.1.249 00:0c:29:a8:c7:0a;
192.168.1.250 00:0c:29:ac:4e:01;
192.168.1.251 00:0c:29:05:ac:8a;
192.168.1.252 00:0c:29:ac:4e:01;
192.168.1.253 00:0c:29:c2:b3:44;
192.168.1.254 00:0c:29:c2:b3:44;
如果只是单纯要IP或者MAC
列出IP
cat dhcpd.leases|grep -o '\<[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\>'
 
 
列出MAC
cat dhcpd.lease|grep -o '\<[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}\>'

本文出自 “风吹云动” 博客,请务必保留此出处http://coolerfeng.blog.51cto.com/133059/58773





    文章评论
 
2008-01-10 22:27:15
抢沙发,呵呵.谢谢.

2008-01-10 23:17:15
先顶一下了

看不懂,我还没有这方面的知识,收藏,哈哈

2008-01-11 10:06:49
楼主,麻烦问下,LINUX下想查看一个软件包需要依赖那些软件包来安装,在LINUX下如何查看,还是必须上网去查看?

2008-01-11 10:58:37
rpm -i --test XXX.rpm

2008-01-11 20:37:53
可以用截取字符串命令与查看命令查看依赖的软件包
#cd /media/cdrom/RedHat/RPMS/
#rpm -qa | grep 字符串

2008-01-11 21:05:22
谢谢,等下我去看看去

2008-01-11 22:24:04
rip -i 软件包名
如果因依赖关系软件无法安装,安装过程中止时,仔细阅读页面的错误信息,有软件包依赖关系提示。


2008-01-13 12:16:36
使用grep sed 也可以完成.
但文件大小过G,过更大的时候.
awk 的方法明显效率要高.

我用这个测试过从LOG中读取文件.时间差别挺大的.

2008-03-09 09:12:32
不错谢谢 这些很实用!!

2008-06-12 16:37:03
谢谢!!

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: