免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5714 | 回复: 2
打印 上一主题 下一主题

使用Nmap::Parser扫描处理内网MAC地址 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-26 18:08 |只看该作者 |倒序浏览
这个礼拜开始学习Perl,断断续续快看完Learning Perl了。
前段时间公司局域网频频中招,老是有病毒实施ARP欺骗,即自己伪装成网关或将其他IP指向自己的MAC地址,每次发作时公司网络即时通时断,每次都还得到交换机上查找犯事的机器,于是就想利用Perl写个小程序监控各台机器的MAC地址,功能为扫描网络内部所有机器的IP地址和MAC地址并记录于数据库内,病毒发作时再次运行程序扫描,如某IP的MAC地址发生变化则提示我并记录在案。
下午折腾了半天才装好Nmap:arser,在家里的小区局域网内测试了一下,似乎可以正常工作了,弄完才有点怀疑这个程序的作用,不知道那个病毒发作时是仅仅伪造一个假的IP->MAC记录告诉网关还是真的改变了其他IP机器的MAC地址?
管它了,好歹是第一个程序了,贴上来看看,说不定还有人给出可行的办法呢

  1. #!/usr/bin/perl
  2. use Nmap::Parser;

  3. dbmopen(%NMAP,"nmapscan",0644) or die "Cannot open nmapscan:$1";
  4. #record them in a small databse
  5. open WARNMAC, ">>warnmac.csv" or die "Cannot open file:$1";
  6. #record it if mac address changed
  7. open NEWIP, ">>newip.csv" or die "Cannot open file:$1";
  8. #record it if found new ip

  9. $nmap_path='/usr/bin/nmap';
  10. $nmap_args='-n -sP';
  11. @ips=@ARGV;
  12. $nmapscan=new Nmap::Parser;

  13. $nmapscan->parsescan($nmap_path,$nmap_args,@ips);

  14. foreach $host ($nmapscan->all_hosts(up))
  15. {
  16.     if(!$NMAP{$host->addr})
  17.     {
  18.         $NMAP{$host->addr}=$host->mac_addr;
  19.         print NEWIP $host->addr,",",$host->mac_addr,"\n";
  20.         print "New found IP:\n",$host->addr,"\t",$host->mac_addr,"\n";
  21.     }
  22.     elsif($NMAP{$host->addr} ne $host->mac_addr)
  23.         {
  24.             print WARNMAC $host->addr,",",$NMAP{$host->addr()},",",$host->mac_addr,"\n";
  25.             print "mac address of ",$host->addr,"have changed,check warnmac.csv\n";
  26.         }
  27. }
复制代码


附注:写程序时清理一下桌面,rm test*时不小心在*前面空了一格,然后,然后学习过程中那些Excerise的程序全部消失了……

论坛徽章:
0
2 [报告]
发表于 2007-08-14 10:11 |只看该作者
谢谢楼主

论坛徽章:
0
3 [报告]
发表于 2007-08-14 16:14 |只看该作者

检查内网mac与ip变更的脚本

为了更高效点的了解内网中mac与ip的变更情况,我写了以下脚本,在此我们可以学到如果生成彩色的输出及如果使用数组和关联数组的混合以建立复杂的数据结构。

数据文件样式:

192.168.4.99    0       00:12:3f:d2:ef:e6       WORKGROUP\6B76C16DD9D3453

我们可以使用以下命令生成原始的数据文件:

[root@supersun private]# nbtscan -m 192.168.4.0/24 |awk '{print $1"\t0\t"$3"\t"$2}' >data.mac

然后我们运行脚本,终端输出新增的IP地址及变更的数据并以红色字体打印,根据实际需要我们选择是否保存到数据文件中。

[root@supersun private]# ./scanmac.pl n

192.168.4.66 00:0b:cd:b6:8f:45 WORKGROUP\B01C804380724F0

*timeout (normal end of scan)

是否写入数据库:

y

以下是脚本的内容:

#!/usr/bin/perl -w

use strict;

use File::Copy;

use Term::ANSIColor qw(:constants);





my $red=RED;

my $rst=RESET;



my $file=shift;

my %data;

if($file){

open FD,$file;

#读取存档数据

while(<FD>){

my @arrary=split /\s+/;

$data{$arrary[0]}[$arrary[1]]{mac}=$arrary[2];

$data{$arrary[0]}[$arrary[1]]{des}=$arrary[3] if defined $arrary[3];

}

close FD;

}

#读取新产生数据并更新存档数据

open NBTSCAN,"nbtscan -m 192.168.4.0/24 |";

while(<NBTSCAN>){

next unless (/^\d/);

my ($ip,$des,$mac,$other)=split /\s+/;

if(! defined $data{$ip} ){

$data{$ip}[0]{mac}=$mac;

$data{$ip}[0]{des}=$des;

}elsif($data{$ip}[0]{mac} ne $mac){

my %tdata;

$tdata{mac}=$mac;

$tdata{des}=$des;

unshift @{$data{$ip}},\%tdata;

}else{

next;

}

print $red;

print "$ip\t$mac\t$des\n";

print $rst;

}



print "是否写入数据库:\n";

my $input=<>;

chomp $input;

if($input =~ m/[y|Y]/){

open FH,">mac.tmp";

foreach my $ip (sort keys %data){

foreach my $num (0..$#{$data{$ip}}){

print FH "$ip\t$num\t$data{$ip}[$num]{mac}\t$data{$ip}[$num]{des}\n";

}

}

close FH;

move "mac.tmp",$file;

}



模块Term::ANSIColor用于生成彩色终端

定义常量$red=red和$rst=RESET;

print $red;与$print $rst之间的输出字体为红色,具体用法我没有细看,改天闲来无事再看吧,呵呵!

另外再奉送一个小脚本,因为华为设备中要求输出的mac地址以下形式0012-3fd2-efe6,因此,以下脚本将转换上一个脚本产生数据中的mac地址。

[root@supersun macip]# cat mactun.pl
#!/usr/bin/perl -w
use strict;


my $file=shift;

open FD,$file;
while(<FD>){
        my ($ip,$num,$mac,$des)=split /\s+/;
        $mac =~ s/(.*):(.*):(.*):(.*):(.*):(.*)/$1$2-$3$4-$5$6/;
        print "$ip\t$mac\n";
}
close FD;

[root@supersun macip]# ./mactun.pl n
192.168.4.10    0014-22d2-e9c0
192.168.4.101   000d-60cb-aa53
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP