【发布时间】:2016-05-27 23:29:52
【问题描述】:
我是 Perl 的新手,为了练习,我正在编写一个简单的 perl 脚本来检查我的家庭网络是否有可用的 IP 地址,并检查它们的 MAC 地址、供应商和每个打开的端口。 我想放入 mysql db 中的所有信息。 这是我的代码:
#!/usr/local/bin/perl
use strict;
use warnings;
use Net::Ping;
use Net::ARP;
use DBI;
use IO::Socket::PortState qw(check_ports);
require config;
my $proto = 'tcp';
my @ports = (21,22,23,80,8080);
my $address;
my $ping_timeout = 1;
my $host;
for my $i (18..21)
{
$host = "10.20.1.$i";
my $timeout = 1;
my $pinger = Net::Ping->new('icmp', $timeout);
print "$host ";
if ($pinger->ping($host))
{
my $mac = Net::ARP::arp_lookup("em0","$host");
my $vendor = vendor_lookup($mac);
$vendor=~ s/^\s+|\s+$//g;
print "$mac $vendor ";
foreach my $port (@ports)
{
my($section, $ping_timeout, %porthash);
$porthash{$proto}{$port}{'name'} = $section;
check_ports($host, $ping_timeout, \%porthash);
my $open = $porthash{$proto}{$port}{'open'};
if ($open) {
print "$port ";
}
}
print "\n";
}
}
如果我运行脚本,我会收到类似的信息:
10.20.1.18 38:ea:a7:6f:d9:05 Hewlett Packard 80 8080
10.20.1.19 fc:15:b4:31:77:76 Hewlett Packard 80 8080
10.20.1.20 e8:39:35:25:dd:36 Hewlett Packard 22 80
我的问题是我似乎没有找到答案,如果我们将 $port 变量放入@array 它将具有与其他数组不同的大小。
我的数据库结构是这样的:
+----+------------+-------------------+--------------+-----------------+---------------------+
| id | ip | mac | opened_ports | vendor | date |
+----+------------+-------------------+--------------+-----------------+---------------------+
| 1 | 10.20.1.19 | fc:15:b4:31:77:76 | NULL | Hewlett Packard | 2016-02-15 15:50:19 |
| 2 | 10.20.1.20 | e8:39:35:25:dd:36 | NULL | Hewlett Packard | 2016-02-15 15:50:19 |
| 3 | 10.20.1.21 | 8c:dc:d4:5d:21:7b | NULL | Hewlett Packard | 2016-02-15 15:50:19 |
| 4 | 10.20.1.18 | 38:ea:a7:6f:d9:05 | NULL | Hewlett Packard | 2016-02-15 16:02:09 |
| 5 | 10.20.1.19 | fc:15:b4:31:77:76 | NULL | Hewlett Packard | 2016-02-15 16:02:09 |
| 6 | 10.20.1.20 | e8:39:35:25:dd:36 | NULL | Hewlett Packard | 2016-02-15 16:02:10 |
| 7 | 10.20.1.21 | 8c:dc:d4:5d:21:7b | NULL | Hewlett Packard | 2016-02-15 16:02:10 |
+----+------------+-------------------+--------------+-----------------+---------------------+
这是导入的信息,没有打开端口的信息。
【问题讨论】: