Help required to print MAC addresses - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Help required to print MAC addresses (/thread-8351.html) |
Help required to print MAC addresses - anna - Feb-16-2018 Hi There, I am getting below MAC details from telnet script, I am not able print in MAC address format, please help. mac address | bport | vlan | flow agg |static|aging|proccess|deny_sa ========================================================================== 0 16 fa d0 be a1 | 300 | 4094 | 4420002c | 1 | 0 | 0 | 0 0 17 7c 76 99 4d | 1622 | 3612 | 4420005d | 0 | 1 | 0 | 0 0 17 7c 80 7c 4a | 1732 | 3612 | 442000c9 | 0 | 1 | 0 | 0 0 17 7c 61 c2 c2 | 1596 | 3612 | 44200047 | 0 | 1 | 0 | 0 0 25 5e 3f e7 18 | 1716 | 3612 | 442000b9 | 0 | 1 | 0 | 0 expecting output as, it seems this devices is not printing leading Zero in MAC address. 00:16:fa:d0:be:a1 00:17:7c:76:99:4d 00:17:7c:61:c2:c2 00:25:5e:3f:e7:18 RE: Help required to print MAC addresses - wavic - Feb-16-2018 output = """mac address | bport | vlan | flow agg |static|aging|proccess|deny_sa ========================================================================== 0 16 fa d0 be a1 | 300 | 4094 | 4420002c | 1 | 0 | 0 | 0 0 17 7c 76 99 4d | 1622 | 3612 | 4420005d | 0 | 1 | 0 | 0 0 17 7c 80 7c 4a | 1732 | 3612 | 442000c9 | 0 | 1 | 0 | 0 0 17 7c 61 c2 c2 | 1596 | 3612 | 44200047 | 0 | 1 | 0 | 0 0 25 5e 3f e7 18 | 1716 | 3612 | 442000b9 | 0 | 1 | 0 | 0""" for line in output.split('\n')[2:]: mac = line.split('|')[0].strip() print('{:0>17}'.format(':'.join(mac.split())))
RE: Help required to print MAC addresses - anna - Feb-16-2018 Thanks... some how.. its not working with some below outputs... mac address | bport | vlan | flow agg |static|aging|proccess|deny_sa ========================================================================== e8 37 7a 9d 1a f1 | 1616 | 3612 | 44200059 | 0 | 1 | 0 | 0 54 b8 a 49 97 d5 | 1696 | 3612 | 442000a5 | 0 | 1 | 0 | 0 b0 b2 dc 5 d 87 | 1730 | 3612 | 442000c7 | 0 | 1 | 0 | 0 0 16 fa d0 be a1 | 300 | 4094 | 4420002c | 1 | 0 | 0 | 0 0 17 7c 76 99 4d | 1622 | 3612 | 4420005d | 0 | 1 | 0 | 0 48 ee c 95 8 ee | 1630 | 3612 | 44200065 | 0 | 1 | 0 | 0 48 ee c bf 49 65 | 1628 | 3612 | 44200063 | 0 | 1 | 0 | 0 0 17 7c 80 7c 4a | 1732 | 3612 | 442000c9 | 0 | 1 | 0 | 0 e8 cc 18 62 4b d3 | 1736 | 3612 | 442000cd | 0 | 1 | 0 | 0 0 17 7c 61 c2 c2 | 1596 | 3612 | 44200047 | 0 | 1 | 0 | 0 0 25 5e 3f e7 18 | 1716 | 3612 | 442000b9 | 0 | 0 | 0 | 0 cc 5d 4e 26 e8 e2 | 1706 | 3612 | 442000af | 0 | 1 | 0 | 0 c d2 b5 5f 62 6e | 1632 | 3612 | 44200067 | 0 | 1 | 0 | 0 28 28 5d f4 f dc | 1680 | 3612 | 44200095 | 0 | 1 | 0 | 0 e8 37 7a 9d e 6b | 1734 | 3612 | 442000cb | 0 | 1 | 0 | 0 cc 5d 4e 26 e2 30 | 1698 | 3612 | 442000a7 | 0 | 1 | 0 | 0 0 26 15 11 7a fa | 1674 | 3612 | 4420008f | 0 | 1 | 0 | 0 c d2 b5 63 51 87 | 1710 | 3612 | 442000b3 | 0 | 1 | 0 | 0 thanks is advance. Bold entries e8:37:7a:9d:1a:f1 054:b8:a:49:97:d5 00b0:b2:dc:5:d:87 00:16:fa:d0:be:a1 00:17:7c:76:99:4d 0048:ee:c:95:8:ee 048:ee:c:bf:49:65 00:17:7c:80:7c:4a e8:cc:18:62:4b:d3 00:17:7c:61:c2:c2 00:25:5e:3f:e7:18 cc:5d:4e:26:e8:e2 0c:d2:b5:5f:62:6e 028:28:5d:f4:f:dc 0e8:37:7a:9d:e:6b cc:5d:4e:26:e2:30 00:26:15:11:7a:fa 0c:d2:b5:63:51:87 RE: Help required to print MAC addresses - wavic - Feb-16-2018 for line in output.split('\n')[2:]: mac = line.split('|')[0].strip().split() print('{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac)) RE: Help required to print MAC addresses - anna - Feb-16-2018 Thanks wavic, let me try and come back to you. regards Anna RE: Help required to print MAC addresses - anna - Feb-17-2018 my bad, something is going wrong import xlwt import sys import os import xlrd import unidecode import telnetlib import time import re from time import sleep user = 'eciecidslam' password = 'Hi-FOCuS' start = time.time() print ("Starting Client...") host = "10.117.1.84" timeout = 120 print ("Connecting...") try: session = telnetlib.Telnet(host, 23, timeout) time.sleep(1) session.read_until("Login :",2) session.write(user+"\r") time.sleep(2) session.read_until("Password :",2) session.write(password + "\r") except Exception,e: print ("socket timeout") else: time.sleep(2) session.read_until("MCR64A >") print("Sending Commands...") session.write("dishash all".encode('ascii') + b"\r") print("Reading...") output = session.read_until("MCR64A >", timeout ) session.write("logout"+"\r") #print (output) session.close() for line in output.split('\n')[2:]: mac = line.split('|')[0].strip().split() print('{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac)) print("Done") print 'It took', time.time()-start, 'seconds.'getting below error Traceback (most recent call last): File "ecicollector.py", line 40, in <module> print('{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac)) IndexError: tuple index out of range RE: Help required to print MAC addresses - wavic - Feb-17-2018 There is something in the output that I am not aware of. What this loop is doing is to split each line after the header and the '====...' by '|' separator, get the first element which is the mac address, split the ( six ) numbers and print each one formatted. It's quite simple. Does it print something before throwing the error? Where does it stop? What is on the line after that? As I see the error there is a wrong number of the elements of the mac address. So the print placeholders are six but in the 'mac' list could be any number. Put a print(len(mac)) before the actual mac address printing to see what is happening.
RE: Help required to print MAC addresses - anna - Feb-17-2018 Hi Wavic, This is output from script Starting Client... Connecting... Sending Commands... Reading... dishash all mac address | bport | vlan | flow agg |static|aging|proccess|deny_sa ========================================================================== e8 37 7a 9d 1a f1 | 1616 | 3612 | 44200059 | 0 | 1 | 0 | 0 54 b8 a 49 97 d5 | 1696 | 3612 | 442000a5 | 0 | 1 | 0 | 0 b0 b2 dc 5 d 87 | 1730 | 3612 | 442000c7 | 0 | 1 | 0 | 0 0 16 fa d0 be a1 | 300 | 4094 | 4420002c | 1 | 0 | 0 | 0 28 28 5d ed b4 41 | 1640 | 3612 | 4420006f | 0 | 1 | 0 | 0 0 17 7c 76 99 4d | 1622 | 3612 | 4420005d | 0 | 1 | 0 | 0 28 28 5d 94 78 da | 1704 | 3612 | 442000ad | 0 | 1 | 0 | 0 48 ee c 95 8 ee | 1630 | 3612 | 44200065 | 0 | 1 | 0 | 0 48 ee c bf 49 65 | 1628 | 3612 | 44200063 | 0 | 1 | 0 | 0 0 17 7c 80 7c 4a | 1732 | 3612 | 442000c9 | 0 | 1 | 0 | 0 e8 cc 18 62 4b d3 | 1736 | 3612 | 442000cd | 0 | 1 | 0 | 0 0 25 5e 3f e7 18 | 1716 | 3612 | 442000b9 | 0 | 1 | 0 | 0 cc 5d 4e 26 e8 e2 | 1706 | 3612 | 442000af | 0 | 1 | 0 | 0 c d2 b5 5f 62 6e | 1632 | 3612 | 44200067 | 0 | 1 | 0 | 0 28 28 5d f4 f dc | 1680 | 3612 | 44200095 | 0 | 1 | 0 | 0 e8 37 7a 9d e 6b | 1734 | 3612 | 442000cb | 0 | 1 | 0 | 0 cc 5d 4e 26 e2 30 | 1698 | 3612 | 442000a7 | 0 | 1 | 0 | 0 0 26 15 11 7a fa | 1674 | 3612 | 4420008f | 0 | 1 | 0 | 0 c d2 b5 63 51 87 | 1710 | 3612 | 442000b3 | 0 | 1 | 0 | 0 Total number of MAC addresses: 19 MCR64A > Traceback (most recent call last): File "ecicollector.py", line 40, in <module> print('{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac)) IndexError: tuple index out of rangeactually... i want to print this like below MAC bport vlan e8:37:7a:9d:1a:f1 1616 3612 to find actual interface of the mac i need to fire another command to check i.e. MCR64A >bportr 1616 Bridge Port Data Of Port ID: 1616 -------------------------------------------- VP: 0 VC: 33 MANI: A Shelf: 0 Slot: 7 [b]Port: 13[/b] UNI: 1 Layer: 0 PVID: 3612 Ingress vlan: 65535 Default user priority: 7 Acceptable frame types: 1 Max ingress priority: 7 Row status: active(1) Oper status: up(1) Oper down reason: 0 Actual failure: noFailure(1) Req user defined filters: 0 Act user defined filters: 0 Max learned addresses: 8 Fail reason: 1 Enforce def priority: disable(2) Max DHCP addresses: 3 Sensed protocol: irrelevant(1) Port remote id: Port circuit id: Req. vlinks: 1073741824 Single Actual vlinks: 1073741824 Single and final output will be MAC bport vlan port e8:37:7a:9d:1a:f1 1616 3612 13 RE: Help required to print MAC addresses - wavic - Feb-17-2018 I can't reproduce the error you get: In [1]: output = """ mac address | bport | vlan | flow agg |static|aging|proccess|deny_sa ...: ========================================================================== ...: e8 37 7a 9d 1a f1 | 1616 | 3612 | 44200059 | 0 | 1 | 0 | 0 ...: 54 b8 a 49 97 d5 | 1696 | 3612 | 442000a5 | 0 | 1 | 0 | 0 ...: b0 b2 dc 5 d 87 | 1730 | 3612 | 442000c7 | 0 | 1 | 0 | 0 ...: 0 16 fa d0 be a1 | 300 | 4094 | 4420002c | 1 | 0 | 0 | 0 ...: 28 28 5d ed b4 41 | 1640 | 3612 | 4420006f | 0 | 1 | 0 | 0 ...: 0 17 7c 76 99 4d | 1622 | 3612 | 4420005d | 0 | 1 | 0 | 0 ...: 28 28 5d 94 78 da | 1704 | 3612 | 442000ad | 0 | 1 | 0 | 0 ...: 48 ee c 95 8 ee | 1630 | 3612 | 44200065 | 0 | 1 | 0 | 0 ...: 48 ee c bf 49 65 | 1628 | 3612 | 44200063 | 0 | 1 | 0 | 0 ...: 0 17 7c 80 7c 4a | 1732 | 3612 | 442000c9 | 0 | 1 | 0 | 0 ...: e8 cc 18 62 4b d3 | 1736 | 3612 | 442000cd | 0 | 1 | 0 | 0 ...: 0 25 5e 3f e7 18 | 1716 | 3612 | 442000b9 | 0 | 1 | 0 | 0 ...: cc 5d 4e 26 e8 e2 | 1706 | 3612 | 442000af | 0 | 1 | 0 | 0 ...: c d2 b5 5f 62 6e | 1632 | 3612 | 44200067 | 0 | 1 | 0 | 0 ...: 28 28 5d f4 f dc | 1680 | 3612 | 44200095 | 0 | 1 | 0 | 0 ...: e8 37 7a 9d e 6b | 1734 | 3612 | 442000cb | 0 | 1 | 0 | 0 ...: cc 5d 4e 26 e2 30 | 1698 | 3612 | 442000a7 | 0 | 1 | 0 | 0 ...: 0 26 15 11 7a fa | 1674 | 3612 | 4420008f | 0 | 1 | 0 | 0 ...: c d2 b5 63 51 87 | 1710 | 3612 | 442000b3 | 0 | 1 | 0 | 0""" In [2]: for line in output.split('\n')[2:]: ...: mac = line.split('|')[0].strip().split() ...: print(len(mac)) ...: print('{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac)) ...: 6 e8:37:7a:9d:1a:f1 6 54:b8:0a:49:97:d5 6 b0:b2:dc:05:0d:87 6 00:16:fa:d0:be:a1 6 28:28:5d:ed:b4:41 6 00:17:7c:76:99:4d 6 28:28:5d:94:78:da 6 48:ee:0c:95:08:ee 6 48:ee:0c:bf:49:65 6 00:17:7c:80:7c:4a 6 e8:cc:18:62:4b:d3 6 00:25:5e:3f:e7:18 6 cc:5d:4e:26:e8:e2 6 0c:d2:b5:5f:62:6e 6 28:28:5d:f4:0f:dc 6 e8:37:7a:9d:0e:6b 6 cc:5d:4e:26:e2:30 6 00:26:15:11:7a:fa 6 0c:d2:b5:63:51:87 In [3]: for line in output.split('\n')[2:]: ...: address = line.split('|')[0].strip().split() ...: mac = [elm for elm in address if elm] ...: print('{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac)) ...: e8:37:7a:9d:1a:f1 54:b8:0a:49:97:d5 b0:b2:dc:05:0d:87 00:16:fa:d0:be:a1 28:28:5d:ed:b4:41 00:17:7c:76:99:4d 28:28:5d:94:78:da 48:ee:0c:95:08:ee 48:ee:0c:bf:49:65 00:17:7c:80:7c:4a e8:cc:18:62:4b:d3 00:25:5e:3f:e7:18 cc:5d:4e:26:e8:e2 0c:d2:b5:5f:62:6e 28:28:5d:f4:0f:dc e8:37:7a:9d:0e:6b cc:5d:4e:26:e2:30 00:26:15:11:7a:fa 0c:d2:b5:63:51:87However the correction in the last loop in the above should eliminate it. In [4]: mac_addr, bport, vlan = [column.strip() for column in output.split('\n')[0].split('|')[:3]] ...: print("{:^23}\t{:^5}\t{:^5}".format(mac_addr, bport, vlan)) ...: print() ...: for line in output.split('\n')[2:]: ...: data = [field.strip() for field in line.split('|')[:3]] ...: mac = [elm for elm in address if elm] ...: mac_addr = '{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac) ...: bport, vlan = data[1:] ...: print("{:^23}\t{:^5}\t{:^5}".format(mac_addr, bport, vlan)) ...:
RE: Help required to print MAC addresses - anna - Feb-17-2018 I think first line of output and last two line are creating problem.
|