LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1008|回复: 1

求个和IP冲突相关的shell

[复制链接]
发表于 2007-10-26 11:04:32 | 显示全部楼层 |阅读模式
是这样的,在内网里我装了个freeBSD在虚拟机中练习,但是要占用内网里的一个IP地址,但是这个段的IP我不能确定哪些没有人用,要是有人用,那就冲突了,对别人很不方便.

能否写个SHELL来实现这个问题呢?

IP我先去占上的,没人使用,一切都正常,当有人用的时候,系统也会提示IP冲突,在这个时候,就直接关机.

也就是当有IP冲突时,系统自动关机,这个用shell可以实现么?



刚拿自己机器做了下实验~当IP冲突时,在系统下会马上出现以下提示,

Oct 26 10:04:45 viva kernel: arp: 00:12:3f:99:f7:04 is using My IP address 192.168.5.245

但是前面的MAC地址是我的地址~还不能拿它来判断~我想只要匹配上 is using My IP address 192.168.5.245  就判断为是,

这个具体怎么写呢?

写完后是放在crontab里就可以了吧?还是每次启动随系统一起起来呢?

谢谢大家.
发表于 2007-10-26 16:33:36 | 显示全部楼层
BSD 我不熟,
如果是 linux,且句子可以在 /var/log/messages 內找得到的話,可以試試:
  1. #!/bin/bash
  2. log_file=/var/log/messages
  3. my_if=eth0
  4. my_ip=`/sbin/ifconfig $my_if | awk '/inet /{print $2}' | cut -d: -f2`
  5. string="kernel: arp: .* is using My IP address $my_ip"
  6. line=`grep "$string" $log_file | tail -1`
  7. # quit if no match found
  8. [ -z "$line" ] && exit
  9. l_time=$(date -d "$(echo $line | awk '{print $1,$2,$3}')" +%s)
  10. c_time=$(date +%s)
  11. # see if less then 1 minute:
  12. if [ $l_time -gt $((c_time-60)) ]; then
  13.         echo shutdown at `date` ....
  14.         echo /sbin/shutdown -t 2 -h now
  15. fi
复制代码

如果是非 linux 環境,可能 date 命令會有問題,請注意哦。
等測試 ok 之後,將倒數第二行的 echo 移除就行了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表