在大型Cisco Catalyst交换机堆栈上,几乎所有交换机端口均已打补丁。我需要确定未使用的用于连接其他设备的端口。 。查看端口LED的活动并不可靠,因为可以关闭用户设备。

通过IOS命令检测所有未使用的交换端口的最简单方法是什么?

评论

有什么答案对您有帮助吗?如果是这样,您应该接受答案,这样问题就不会永远弹出来寻找答案。或者,您可以提供并接受自己的答案。

#1 楼

无论我要检查哪种接口,我都经常使用

sh int | i (FastEthernet|0 packets input)


或与GigabitEthernet相同。

> sh int(即show interfaces)给出了大量所有接口的ste状态。
管道符号|可用于过滤,也可用于搜索表达式

| i(用于include)过滤器与以下搜索表达式匹配的输出
我使用(...|...)来匹配两个条件:接口名称和我喜欢看到的状态,我们可以在此处使用正则表达式,例如“ or”表达式

输出看起来像:

...
FastEthernet1/0/31 is up, line protocol is up (connected)
     95445640 packets input, 18990165053 bytes, 0 no buffer
FastEthernet1/0/32 is up, line protocol is up (connected)
FastEthernet1/0/33 is up, line protocol is up (connected)
FastEthernet1/0/34 is down, line protocol is down (notconnect)
     0 packets input, 0 bytes, 0 no buffer
FastEthernet1/0/35 is down, line protocol is down (notconnect)
FastEthernet1/0/36 is up, line protocol is up (connected)
FastEthernet1/0/37 is down, line protocol is down (notconnect)
     0 packets input, 0 bytes, 0 no buffer
...


现在我可以看到我的候选项,随着时间的推移实际上输入了0个数据包,即使我的表达式匹配的数字只是以0结尾我可以使它更完美,但易于记忆也是一个好处。在每0个数据包输入行之前的接口名称是我的候选。清除计数器非常好:sh int <name>


好的做法是,使未使用的交换端口保持关闭状态。因此,使用clear counters [type number]等轻松识别它们。如果使用以前已明确关闭的开关端口,也不会遇到问题。

评论


Device#Show int |我未连接将仅显示关闭/关闭的接口。

– Artanix
13年5月20日在14:27



答案是“网络工程师1.0”样式。认真吗管道包括? :)而是从设备中提取数据,并使用标准UNIX工具对其进行处理,然后编写自己的脚本/程序以生成报告。

– netdad
13年5月21日在0:07

@stefan,不需要括号...在ios中可以正常工作:sh int | i FastEthernet | 0包输入

–迈克·彭宁顿
13年5月21日在4:16

另外,如果删除“快速”部分,则将匹配Gig,快速和常规以太网接口

– Remi Letourneau
2014年6月10日14:22

#2 楼

最终...文档。您需要知道每条跳线在哪里都可以100%确定您没有断开某人可能期望在某些时候工作的东西。仅因为端口当前处于“关闭”状态并不意味着没有人在使用该端口。同样只是因为计数器当前为零并不意味着在不久的将来它不会被使用或不再被使用-计数器可以清除,并且计数器在引导时重置为零。 />我曾在ISP和大型企业工作,文档是了解内容的关键。没有它,随机猜测将导致无数糟糕的日子……当您将DSL线路连接到其他人,重复地址分配,关闭错误的接口等时,客户会非常生气。如果没有文档,在数千条电缆中查找数十根电缆可能会很痛苦(而且端口描述很简单。)

评论


我同意,文档绝对重要,并且我会记录补丁和端口配置。仅在大型办公室中,其中98%的端口具有相同的标准配置,并且工作地点迅速变化,并且修补工作是由第一级服务台完成的,因此我无法安全地进行记录,因此我需要检查所有使用的内容。当然,如果没有文档说明,将不会碰到非标准端口。

– Stefan
13年5月20日在17:37



必须否决这个问题(我认为这是我的第一个问题。)这个问题更多的是关于“我现在可以审核什么”与“我认为我有什么?”文档很棒。有时,无关紧要。

– netdad
13年5月21日在0:29

“用于连接更多设备”,因此他正在寻找可用于其他地方的免费端口,而不是对其基础结构进行审核。正确的文档记录是唯一可以肯定地知道的方法,否则……请跟踪电缆(他说这是一个很大的麻烦。)

–瑞奇
13年5月21日在0:36

文档非常有用,并且对您有很大帮助。但是,有时您“继承”一个几乎没有文档或根本没有文档并且没有收集信息的方法的网络。例如,我工作的一个网络有成千上万个交换机端口,而在一栋大楼中,配线架上标有“ Bob M。”,“ Sally J.”等。有时,您只需要事先掌握可收集的信息(并希望您有文档)。

– YLearn♦
13年5月22日在0:37



我同意文档说明,并在交换端口上添加了有用的描述。在我工作过的最大的Unis之一中,员工总是从一栋建筑搬到另一栋。除其他外,Statseeker被用来对港口进行轮询,然后我们可以及时返回以确定三个月或更长时间未使用哪个港口来收回它们。

–user4565
2014年5月1日21:13

#3 楼

我也喜欢

sh int | inc line protocol is|Last input


哪个输出

编辑:另外值得注意的是(由于超出了此问题的范围,原因)“最后输入”几乎总是“从不”

评论


我喜欢它,直到尝试为止,并注意到我的主F5上的管理界面显示“永远不会输入最新信息”,但还会显示“ 136217193数据包输入”。几分钟前我只是在F5中,所以我非常有信心接口正在使用和正常工作。

–戴夫·努南(Dave Noonan)
2013年5月20日14:59



好点了,我添加了一个编辑说明。这是预期的行为。同样,我也提出了一个新问题(networkengineering.stackexchange.com/questions/664/…)以解决您的问题。

–迈克·马洛塔(Mike Marotta)
13年5月20日在16:35



@MikeMarotta因此,我们可以由此推断出该命令实际上是不好的,因为结果不可靠吗?

– jwbensley
13年5月21日在8:53

尽管最后输入几乎永远不会,但输出值应该是您要查看的内容,这确实抓住了这一点。

– YLearn♦
2014年6月10日在2:02

#4 楼

我喜欢@Stefan的答案,但是使用此命令行“ sh int | i(以太网| 0个数据包输入)”现在可以捕获所有以太网接口类型并过滤掉以零结尾的非零数字。他提到可能进行一些微调,所以这只是一个示例。

另一种选择是...

  sh int counters | i (Port|_0             0             0             0)


是的,需要空格。正确获取空格的最简单方法是执行“ sh int counters”并复制全零的行。这里的一个陷阱是,列表的中途从所需的Input更改为Output,我们不关心查找未使用的端口。它的优点是仅显示没有输入的端口,因此您不必像使用Stefan的方法那样清除使用中的端口。

评论


使用awk。不用担心疯狂的空间。

– netdad
13年5月21日在0:03

我不相信awk在IOS CLI上可用。如果是这样的话,我很生气,因为我没有这么做,这肯定会很方便。

–戴夫·努南(Dave Noonan)
13年5月21日在0:24

看我的答案。我的观点是,您应该(通过SNMP或其他方式)从设备中提取信息,或将其输出粘贴到您喜欢的UNIX盒中,然后在那里进行工作。这样便可以使用整个世界。

– netdad
13年5月21日在0:34

+1,从技术上讲,您可以使用show int计数器|我_0 _。* _ 0 _。* _ 0 _。* _ 0_而不是空格...您的答案也必须是int counter | i(Port | _0 0 0 0)(请注意,下划线由IOS解释为空格)

–迈克·彭宁顿
13年5月21日在5:02



适当的正则表达式在最新的IOS版本上受支持(我在12.2(55)SE7的3560上进行了此操作),因此执行您建议的最简单的正则表达式将是show interfaces counter |。 inc(+0 +0 +0)。

– Paul Gear
13年5月21日在20:48

#5 楼

我会抓取输出(或什至使用SNMP抓取甚至更好),然后使用标准的UNIX工具对其进行解析。这是一个简单的示例:

这里,我将'show int counters'(仅出于演示目的)的部分输出保存到了一个名为“ counters”的文件中。现在,只需使用awk生成所有四个计数器字段都为零的所有端口的报告:

[mkantows@ochofu049]$ cat counters
Port            InOctets    InUcastPkts    InMcastPkts    InBcastPkts
Gi1/0/1                0              0              0              0
Gi1/0/2      94949242720      556137619         571828          57745
Gi1/0/3       1522191492        8663327        1105299          55269
Gi1/0/4       3743856345       18565173        1275617          53658
Gi1/0/5                0              0              0              0
Gi1/0/6                0              0              0              0


这里的主要思想是可以从设备中获取正在使用的任何数据,因此您可以进行更智能/复杂/简单/任何形式的解析和报告。 tty连接的输出可以真正有效地快速找到多个Cisco设备上未使用的端口。 (在一个日志文件中)
运行类似以下的命令...,其中“ HOSTNAME”是您的Cisco设备主机名方案的通用组成部分。 awk'{if($ 1 == HOSTNAME)|| ($ 2 == 0 && $ 3 == 0 && $ 4 == 0 && $ 5 == 0)打印$ 1}'

评论


真好!有时,通过grep和sed通过管道传输文件也很容易。

– Stefan
13年5月20日在15:36

的确如此-用任何标准的UNIX工具都能完成工作。要点是“不要在路由器上做,那太痛苦了” :)

– netdad
13年5月20日在15:39

我不会拒绝投票,但您确实应该研究IOS正则表达式...在注释末尾包含的CLI比将CLI吸取到UNIX计算机上然后使用一些awk咒语要容易得多... show int counters |我_0 _。* _ 0 _。* _ 0 _。* _ 0_

–迈克·彭宁顿
13年5月21日在4:23



#6 楼

我是新手,所以我无法投票赞成@netdad和@mike pennington的答案-但我喜欢它们。要想进一步了解@Mike Pennington的答案,并假设您最近已经清除了计数器,还可以运行以下命令: 0”,然后是1个或多个空格,然后是“ 0”,然后是1个或多个空格,然后是“ 0”,然后是1个或多个空格,最后是“ 0”。帮助。

#7 楼

我一直使用

show interfaces status


总结起来很不错,很花哨。

评论


当然,这是一个很好的概述,但是由于它没有显示数据包计数器,因此我们无法查看设备是否刚刚关闭电源或已断开连接,但端口可能会不时使用。如果我只是因为当时端口已关闭或未连接而将端口用于其他目的,对于该用户可能会感到惊讶。

– Stefan
13年5月20日15:00



啊,好的,看看您的意思是...我每年都会清算柜台。.因此,对于我来说,一个sh int柜台效果很好,但是您必须不时清理柜台...

–user209
13年5月20日在15:08

我喜欢添加|与此有关。

– Paul Gear
13年5月21日在20:50



#8 楼

如果您需要定期执行此操作,Perl和Net :: Telnet :: Cisco就是最好的选择。您可以登录X个路由器,获取所需接口上的所有信息,解析输出,然后将其打印到文件中,或者通过Net :: SMTP通过电子邮件发送给它,或者将其打印到标准输出中。我可以根据需要提供示例,但是非常简单。格式:

set show_counters [exec show interfaces counters | i 0 +0 +0 +0]
set line [split $show_counters "\n"]
foreach record $line {
    set fields [join $record " "]
    foreach field $fields {
        if { $field != 0 } {
            puts $field
        }
    }
}


我之所以提供此功能,是因为TCL及其操作方法[Perl]比Perl容易访问[IMHO]

#9 楼

我通常使用sh int des | ex up,它将列出所有处于关闭状态的端口

评论


可行,但我不得不说我发现show interfaces status的输出更有用。

– Paul Gear
13年5月21日在20:51

#10 楼

这是我最近使用的一种电缆,用于从至少六个星期没有任何活动的端口上拔下电缆:

show int | i proto.*notconnect|proto.*administratively down|Last in.* [6-9]w|Last in.*
[0-9][0-9]w|[0-9]y|disabled|Last input never, output never, output hang never


#11 楼

sh int | i ( 0 packets input)|proto|Desc


以0开头的空格将排除以零结尾的较大数字。

最好关闭端口(禁用),直到它们被使用为止。例如,在已经打开的端口上更改交换端口访问VLAN是有风险的,除非您可以确定未使用它。

输出可能如下所示,告诉我们g8 / 18上的交换端口由于使用g8 / 19时最后一个计数器清零(由于没有输入“ 0数据包”),因此禁用了0数据包。

GigabitEthernet8/18 is administratively down, line protocol is down (disabled)
  Description: 3a30
     0 packets input, 0 bytes, 0 no buffer
GigabitEthernet8/19 is up, line protocol is up (connected)
  Description: 4a25.vmhost112 (vmnic5)
要了解涉及哪个配线架插孔,请使用Description
字段来帮助您进行记录。配线架应以一致的方式连接到
交换机端口,因此易于记录,因为配线架插孔可预见。我在描述中使用了
Rack-Row-Jack格式+要跟踪的主机名,
但是是一种压缩方式。 4b27将是第4行,第b行,插孔27
,后跟hostxyz或任何主机名。所以我的描述是
4b27.hostxyz。


#12 楼

那么使用MAC表呢?它列出了带有接口的MAC地址,并对其进行了老化。您必须将列表从IOS中取出,以过滤出唯一地址列表。

#13 楼

 sh int | in is down|input never, output never

FastEthernet0 is administratively down, line protocol is down 
  Last input never, output never, output hang never
GigabitEthernet1/0/2 is down, line protocol is down (notconnect) 
GigabitEthernet1/0/4 is down, line protocol is down (notconnect) 
  Last input never, output never, output hang never
GigabitEthernet1/0/13 is down, line protocol is down (notconnect) 
  Last input never, output never, output hang never
GigabitEthernet1/0/24 is down, line protocol is down (notconnect) 
  Last input never, output never, output hang never


评论


您可以轻松地将此转换为int | in(永远不会输出),这将更容易键入并且会得到相同的结果。

– YLearn♦
2014年6月10日在2:05

#14 楼

好。从2900开始的所有交换机上都可以使用的东西(无需测试更早),并且仅显示下行端口。结果是sh int statusconnected,所以排除或包含并没有任何好处,因为连接词是二者的一部分,所以您可以理解。

在3524上我知道下面带有两个命令,以使其清晰可见:


评论


校正,连接是这两者的一部分,但可以排除连接以获得所需的输出。

– YLearn♦
2014年6月10日在2:07



#15 楼

这有点作弊,但是如果所有内容都仅附加到一个终端设备上,则可以使用粘性MAC地址打开端口安全性。请过一会儿再检查一次(假设您有合理的时间假​​设某人会使用该计算机或该计算机不存在),然后运行的配置会显示是否有任何人使用了该端口。我很确定您可以在每个接口上最多使用超过1个粘性Mac地址,以防万一您在同一端口上使用VoIP电话和计算机,但我不确定。

评论


我不记得该命令,但是您可以将最大MAC数设置为多个。

–戴夫·努南(Dave Noonan)
13年5月21日在1:23

在该界面下,“ switchport port-security maximum 2”(交换端口最大安全性2)或您希望允许的任何数字。

–戴夫·努南(Dave Noonan)
13年5月21日在13:48

我知道您可以通过端口安全性来更改允许的最大MAC地址,但我不知道您是否可以通过粘性学习多个。

–艾培(Avery Abbott)
13年5月22日在15:58

#16 楼

哦,很容易键入的日子:

switch 1#show ver | in uptime
switch 1 uptime is 28 weeks, 6 days, 20 hours, 19 minutes

switch 1#show inter link | in 28 weeks
Fa3/1                      28 weeks, 6 days, 20 hours, 19 minutes 16 secs
Fa3/2                      28 weeks, 6 days, 20 hours, 19 minutes 16 secs


(那是在4500版本运行的12.2(20)上)

#17 楼

我认为,在Cisco环境中,最好的方法是显示版本,以了解交换机的正常运行时间。

评论


您特别要说的是哪些字段,这如何帮助您了解是否使用了交换端口?

–generalnetworkerror
13年5月28日在6:44

#18 楼

仅使用IOS命令有点棘手-您会漏掉奇怪的命令。
我建议像其他人一样使用snmp(solarwinds有很多您可能要看的免费工具)并监视设备几天(如果需要,则为数周)

对于您提到的使用跟踪电缆等费力的部分。
我最大程度地减少了将交换机端口映射到跳线端口等工作的工作是清除计数器,然后几天后使用snmp陷阱,然后拔下1-2秒钟的配线架,然后在snmp陷阱监视器/接收器上输入一个条目(模块y上的端口x掉线),我只是做了再次进行相同的验证(不是有人偶然关闭了其中一个端口上的设备)。
一个24端口面板可能需要5分钟-所以这相当快。对于死者-再回去一次。如果它们仍然没电,并且计数器上没有任何变化,则可以安全地假定该端口实际上未被使用。

#19 楼

我通常使用“显示界面状态”及其变体,但我也使用一种名为“ Switchmap”的简洁开源软件来提供界面的简单图形视图。这样做的一大好处是,如果某个端口处于打开/关闭状态,它将告诉您上一次在其上进行通信的时间是多久,您可以从那里拨打电话,以决定是否应重复使用它。

http://sourceforge.net/projects/switchmap/

这样可以节省一些键入内容:-)

#20 楼

test cable diagnostics tdr interface *intname here*


这应该告诉您连接到交换机端口的电缆是否实际上已连接到任何东西。不论其状态如何。
test替换为show以获取状态。

评论


这与显示int状态确实没有什么不同。如果我已经拔掉笔记本电脑回家的电源,那么我的端口可能会在早上重新分配。

–瑞奇
13年5月22日在2:26

#21 楼

我们公司遇到这个问题。我们使用“ show arp”和“ show mac address-table”命令输出的相关性来关联前提条件中所有计算机/设备的MAC地址。

首先,您需要列出网络中设备的IP和MAC列表,并使用上述命令将它们与相应的接口关联...

#22 楼

显示IP界面简介是我个人的最爱。

使它更易于查看。如果没有,那里有很多工具可以帮助跟踪许多交换机上的端口使用情况。

#23 楼

在Cisco设备上,可以使用;

sh int status


在HP设备上,命令是;

#24 楼

我认为您正在寻找基于状态的总和?至少听起来像你的问题。

show interfaces status | count notconnect|connected


为您提供有关已连接或未连接的大量信息。

评论


OP似乎专门询问未使用哪些交换机端口,以便他可以将新设备连接到该设备,而不是有多少未使用的设备。

– Teun Vink♦
15年5月9日在8:48