Python Forum
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)

Pages: 1 2 3 4 5 6


RE: Help required to print MAC addresses - wavic - Feb-17-2018

As you can see the code split the output by new line symbol then gets all elements from the third one with index 2 to the end. No way the error is because of the first line.

Is the corrected code working for you? And the last printed summarize?


RE: Help required to print MAC addresses - anna - Feb-17-2018

sorry.. i am on the same page, below is the error
Output:
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 | 0 | 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 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 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 6c 72 20 ee a8 66 | 1594 | 3612 | 44200045 | 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 c d2 b5 63 51 87 | 1710 | 3612 | 442000b3 | 0 | 1 | 0 | 0 Total number of MAC addresses: 20 MCR64A > Traceback (most recent call last): File "ecicollector.py", line 43, in <module> mac_addr, bport, vlan = [column.strip() for column in output.split('\n')[0].split('|')[:3]] ValueError: need more than 1 value to unpack

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()
    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))
print("Done")
print 'It took', time.time()-start, 'seconds.'
is my code ok?


RE: Help required to print MAC addresses - wavic - Feb-17-2018

My bad :)
mac_addr, bport, vlan = list([column.strip() for column in output.split('\n')[0].split('|')[:3]])
I didn't get these errors. Dodgy


RE: Help required to print MAC addresses - anna - Feb-17-2018

mac len output as below... going mad
Output:
dishash all mac address | bport | vlan | flow agg |static|aging|proccess|deny_sa ========================================================================== 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 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 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 > 2 1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 6 0 2 Done It took 5.51255607605 seconds.

meanwhile.. I am working on another script to print mac addresses from another device, everything going well, however not able to skip match line.

import xlwt
import sys
import os
import xlrd
import unidecode
import telnetlib
import time
import re
from time import sleep
start = time.time()
user = 'admin'
password = '1234'
print ("Starting Client...")
host    = "10.19.1.49"
timeout = 2
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(">")
    print("Sending Commands...")
    session.write("dsl -c".encode('ascii') + b"\r")
    print("Reading...")
    session.read_until("$", timeout )
    session.write('get bridge forwarding' +'\r\r')
    time.sleep(2)
    output = session.read_until("$", timeout )
    session.write('\x1A')
    session.read_until(">")
    session.write("exit"+"\r")
    session.close()
    data = iter(output.strip().split('\n'))
    try:
        for item in data:
            if "get" in item:
               next(data)
            if "MAC" in item:
               next(data)
            if "----" in item:
               next(data)
            print item
    except StopIteration:
           pass
file.close()
print("Done")
print 'It took', time.time()-start, 'seconds.'
current output...
Output:
get bridge forwarding ----------------------------------------------- 00:18:82:2B:F4:A2 193 662 Learned C0:A0:BB:9C:38:21 22 662 Learned 00:90:1A:A3:C6:23 193 822 Learned E8:37:7A:9D:0F:44 15 822 Learned 00:90:1A:A3:C6:24 193 3214 Learned E8:CC:18:60:B3:E4 17 3214 Learned 00:90:1A:A3:C6:24 193 3240 Learned C0:EA:E4:44:81:A1 1 3240 Learned 00:17:7C:77:E6:DE 14 3603 Learned 10:62:EB:66:E8:2E 3 3603 Learned 40:7C:7D:1F:89:73 193 3603 Learned CC:5D:4E:72:77:C0 10 3603 Learned $
expected output

Output:
00:18:82:2B:F4:A2 193 662 Learned C0:A0:BB:9C:38:21 22 662 Learned 00:90:1A:A3:C6:23 193 822 Learned E8:37:7A:9D:0F:44 15 822 Learned 00:90:1A:A3:C6:24 193 3214 Learned E8:CC:18:60:B3:E4 17 3214 Learned 00:90:1A:A3:C6:24 193 3240 Learned C0:EA:E4:44:81:A1 1 3240 Learned 00:17:7C:77:E6:DE 14 3603 Learned 10:62:EB:66:E8:2E 3 3603 Learned 40:7C:7D:1F:89:73 193 3603 Learned CC:5D:4E:72:77:C0 10 3603 Learned



RE: Help required to print MAC addresses - wavic - Feb-17-2018

I copied a wrong loop.
In [2]: 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 data[0].split() 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))
Here is what I get. Try it.
Output:
mac address bport vlan e8:37:7a:9d:1a:f1 1616 3612 54:b8:0a:49:97:d5 1696 3612 b0:b2:dc:05:0d:87 1730 3612 00:16:fa:d0:be:a1 300 4094 28:28:5d:ed:b4:41 1640 3612 00:17:7c:76:99:4d 1622 3612 28:28:5d:94:78:da 1704 3612 48:ee:0c:95:08:ee 1630 3612 48:ee:0c:bf:49:65 1628 3612 00:17:7c:80:7c:4a 1732 3612 e8:cc:18:62:4b:d3 1736 3612 00:25:5e:3f:e7:18 1716 3612 cc:5d:4e:26:e8:e2 1706 3612 0c:d2:b5:5f:62:6e 1632 3612 28:28:5d:f4:0f:dc 1680 3612 e8:37:7a:9d:0e:6b 1734 3612 cc:5d:4e:26:e2:30 1698 3612 00:26:15:11:7a:fa 1674 3612 0c:d2:b5:63:51:87 1710 3612



RE: Help required to print MAC addresses - anna - Feb-18-2018

import xlwt
import sys
import os
import xlrd
import unidecode
import telnetlib
import time
import re
from time import sleep
user = 'user removed'
password = 'password removed'
start = time.time()
print ("Starting Client...")
host    = "host removed"
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()
    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 data[0].split() 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))
print("Done")
print 'It took', time.time()-start, 'seconds.'
Output:
Starting Client... Connecting... Sending Commands... Reading... dishash all mac address | bport | vlan | flow agg |static|aging|proccess|deny_sa ========================================================================== 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 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 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 c d2 b5 63 51 87 | 1710 | 3612 | 442000b3 | 0 | 1 | 0 | 0 Total number of MAC addresses: 18 MCR64A > Traceback (most recent call last): File "ecicollector.py", line 37, in <module> mac_addr, bport, vlan = [column.strip() for column in output.split('\n')[0].split('|')[:3]] ValueError: need more than 1 value to unpack
sorry to trouble you, but same error.


RE: Help required to print MAC addresses - wavic - Feb-18-2018

https://python-forum.io/Thread-Help-required-to-print-MAC-addresses?pid=39924#pid39924


RE: Help required to print MAC addresses - anna - Feb-18-2018

python3.6 showing below error, I am fail to understand issue

Output:
Reading... b'dishash all\r\r\n\r\n mac address | bport | vlan | flow agg |static|aging|proccess|deny_sa\r\n==========================================================================\r\n e8 37 7a 9d 1a f1 | 1616 | 3612 | 44200059 | 0 | 1 | 0 | 0\r\n 54 b8 a 49 97 d5 | 1696 | 3612 | 442000a5 | 0 | 1 | 0 | 0\r\n b0 b2 dc 5 d 87 | 1730 | 3612 | 442000c7 | 0 | 1 | 0 | 0\r\n 0 16 fa d0 be a1 | 300 | 4094 | 4420002c | 1 | 0 | 0 | 0\r\n 28 28 5d ed b4 41 | 1640 | 3612 | 4420006f | 0 | 1 | 0 | 0\r\n 0 17 7c 76 99 4d | 1622 | 3612 | 4420005d | 0 | 1 | 0 | 0\r\n 28 28 5d 94 78 da | 1704 | 3612 | 442000ad | 0 | 1 | 0 | 0\r\n 48 ee c 95 8 ee | 1630 | 3612 | 44200065 | 0 | 1 | 0 | 0\r\n 48 ee c bf 49 65 | 1628 | 3612 | 44200063 | 0 | 1 | 0 | 0\r\n 0 17 7c 80 7c 4a | 1732 | 3612 | 442000c9 | 0 | 1 | 0 | 0\r\n e8 cc 18 62 4b d3 | 1736 | 3612 | 442000cd | 0 | 1 | 0 | 0\r\n 0 17 7c 61 c2 c2 | 1596 | 3612 | 44200047 | 0 | 1 | 0 | 0\r\n cc 5d 4e 26 e8 e2 | 1706 | 3612 | 442000af | 0 | 1 | 0 | 0\r\n c d2 b5 5f 62 6e | 1632 | 3612 | 44200067 | 0 | 1 | 0 | 0\r\n 28 28 5d f4 f dc | 1680 | 3612 | 44200095 | 0 | 1 | 0 | 0\r\n 6c 72 20 ee a8 66 | 1594 | 3612 | 44200045 | 0 | 1 | 0 | 0\r\n e8 37 7a 9d e 6b | 1734 | 3612 | 442000cb | 0 | 1 | 0 | 0\r\n cc 5d 4e 26 e2 30 | 1698 | 3612 | 442000a7 | 0 | 1 | 0 | 0\r\n c d2 b5 63 51 87 | 1710 | 3612 | 442000b3 | 0 | 1 | 0 | 0\r\n\n\rTotal number of MAC addresses: 19\n\r\r\nMCR64A >' Traceback (most recent call last): File "ecicollector-1.py", line 35, in <module> mac_addr, bport, vlan = [column.strip() for column in output.split('\n')[0].split('|')[:3]] TypeError: a bytes-like object is required, not 'str'



RE: Help required to print MAC addresses - wavic - Feb-18-2018

I see that your output is as bytes. The new line is the Windows one ( \r\n ).

You have to convert it to string.

b'hello'.decode('utf-8')
So
output = output.decode('utf-8')



RE: Help required to print MAC addresses - anna - Feb-18-2018

Thanks Wavic, Printing issue is resolved, however still issue with parsing, below is the error.

Output:
Traceback (most recent call last): File "ecicollector-1.py", line 35, in <module> mac_addr, bport, vlan = [column.strip() for column in output.split('\n')[0].split('|')[:3]] TypeError: a bytes-like object is required, not 'str'

current error
Output:
Traceback (most recent call last): File "ecicollector-1.py", line 35, in <module> mac_addr, bport, vlan = [column.strip() for column in output.decode('utf-8').split('\n')[0].split('|')[:3]] ValueError: not enough values to unpack (expected 3, got 1)