这个占用了大量带宽的IP到底在哪?谁在用?我真想直接封了它! 不管是公司内部网络之间的WAN连接,还是共享NAT/Proxy上网,带宽被占满是最烦人的一件事情。轻则上不去网,重则影响
这个占用了大量带宽的IP到底在哪?谁在用?我真想直接封了它!
不管是公司内部网络之间的WAN连接,还是共享NAT/Proxy上网,带宽被占满是最烦人的一件事情。轻则上不去网,重则影响公司业务,而所有这些最终都会指向公司网管。虽然可以通过cisco上的ip accounting / netflow,Linux上的iftop/bandwidthd或者抓包等找到那个可恶的IP,可这IP到底在哪???谁在用???甚至当你花费半天力气找到始作俑者时,往往面对一张装作无知的脸孔:我什么都没干啊。艹。。。
现在有办法快速找到这个可恶的家伙,而且,需要他乖乖的跑到你这里来问:我怎么上不了网了?你可以骄傲的问:哼哼,你干坏事了吧。。。 我们所需要做的,就是安装Netdisco
如上图,Netdisco可以清晰的显示 IP地址 - MAC地址 - 机器名 - 工作组 - 用户名 之间的对应关系,包括连到公司网络的时间等。 注:Netdisco适应绝大多数网络环境,而且客户端越多越能凸显出Netdisco的便利性。
硬件环境:
1台3层网络交换机(只有2层的也可以,步骤相同,但客户机设置上有个不入流的小技巧),我用的是Cisco设备
1台Linux主机,我用的是Fedora 14
Cisco上配置管理IP地址、开启SNMP
conf t
interface Vlan1
ip address ip_addr netmask
no shut
conf t
snmp-server community "community名称" RO (或者RW)
Linux上安装Netdisco
yum install netdiscoNetdisco的配置
/usr/sbin/netdisco_config - 这是1个自动配置脚本 这行时间比较长,特别是Populating the OUI database for netdisco这步 会有些提问,输入密码等 提示give admin port control? 输入y 提示give admin admin rights?输入y 提示Full user name?输入y 如果上面没有输入,最后访问 http://linux_ip_address/netdisco时会没有administration panel,解决办法是 /usr/share/netdisco/netdisco -u 提示输入核心设备IP地址; 提示输入snmp community字符串(网内全部网络设备设备最好使用相同的snmp community,简单;当然也可直接编辑配置文件添加不同的snmp community),电脑等在NetDisco里算作node 安装完成后运行netdisco -r “核心交换机ip” (注:这步好像配置脚本会自动做,记不清楚了) 对大型网络,可能要1~几个小时才能完成。 最后会报告哪些不成功,一般是由于SNMP community名称不同或者没配置SNMP。对于不同community的,可以运行vi /etc/netdisco.conf,在community一行加入这些community名称,然后运行命令netdisco -d 设备ip 即可。 最后,访问http://ip_addr/netdisco,输入前面自己定义的用户名和密码就可以了。(Netdisco号称可以直接关闭交换机端口,不过还是建议大家登录到交换机上去关闭。) 现在,当你发现某个IP在干坏事的时候,直接上交换机关了这个端口就可以了,千万注意别错关了老板的;-)常见问题
1,如果出现这个错误: Starting netdisco admin daemon:Can't locate netdisco.pm in @INC (@INC contains: /usr/sbin /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5 /usr/share/perl5 /usr/local/lib/perl5/site_perl/5.10.0/i386-linux-thread-multi /usr/local/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl /usr/lib/perl5/site_perl .) at /usr/sbin/netdisco line 27. BEGIN failed--compilation aborted at /usr/sbin/netdisco line 27. 解决办法: copy 1份netdisco.pm到/usr/local/lib/perl5或者/usr/local/share/perl5目录 用netdisco_config script 的时候,提示输入netdisco database密码的时候输入"netdisco"或者root的密码; 脚本运行后在手动重启httpd 1次。 2,前面说到如果没有3层交换机只有2层交换机怎么办?其实也能办,就是在客户端设置DNS的时候,把第1个DNS设置为2层交换机的IP地址。这个办法真不太入流,但是也真奏效。 3,Netdisco用的是pgsql数据库,如果对数据库熟悉,可以抓取其中的数据并实现更多的功能,比如,实现802.1x的接入控制等。 -sh-4.1$ psql netdiscopsql (8.4.9)
Type "help" for help. netdisco=> \d -- 查看表
List of relations
Schema | Name | Type | Owner
--------+------------------------+----------+----------
public | admin | table | netdisco
public | admin_job_seq | sequence | netdisco
public | device | table | netdisco
public | device_ip | table | netdisco
public | device_module | table | netdisco
public | device_port | table | netdisco
public | device_port_log | table | netdisco
public | device_port_log_id_seq | sequence | netdisco
public | device_port_power | table | netdisco
public | device_port_ssid | table | netdisco
public | device_port_vlan | table | netdisco
public | device_port_wireless | table | netdisco
public | device_power | table | netdisco
public | device_vlan | table | netdisco
public | log | table | netdisco
public | log_id_seq | sequence | netdisco
public | node | table | netdisco
public | node_ip | table | netdisco
public | node_monitor | table | netdisco
public | node_nbt | table | netdisco
public | node_wireless | table | netdisco
public | oui | table | netdisco
public | process | table | netdisco
public | sessions | table | netdisco
public | subnets | table | netdisco
public | user_log | table | netdisco
public | user_log_entry_seq | sequence | netdisco
public | users | table | netdisco
(28 rows) netdisco=> select * from device_ip; 等等等等。。。