Mikrotik python mactelnet,无法发送命令

2024-09-28 01:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过Python文件为mikrotik配置编写脚本。我可以通过SSH,Telnet和mac Telnet连接到mikrotik,但是我不能向mikrotik发送命令,输出是进程被中断。你能帮我用mactelnet在python脚本中推送命令吗?我在main中测试mactelnet函数。在

我也包括剧本。在

非常感谢。在

    import sys, posix, time, md5, binascii, socket, select
import pexpect
import os

class LoginManager:
    """ Class representing Microtic """
    def __init__(self,hostIP,login,password):
        self.host = hostIP
        self.username = login
        self.pwd = password

    #telnet na mikrotik
    def loginTelnet(self,login,password):
        """
        Function to login to mikrotik via telnet
        :param login:
        :param password:
        :return:
        """
        import telnetlib
        try:
            host = '172.16.49.2'
            port = 23
            telnetcon = telnetlib.Telnet(host,port)
            telnetcon = telnetlib.Telnet(host)
            #user input
            telnetcon.read_until(b"Login: ")
            telnetcon.write(login.encode()+"\n")
            #user password
            telnetcon.read_until(b"Password: ")
            telnetcon.write(password.encode()+b"\n")
            time.sleep(10)
            telnetcon.close()
            '''
            telnetcon.read_until()
            telnetcon.read_all('Please press "Enter" to continue!'+"\n")
            telnetcon.write('\013')
            telnetcon.read_all('/ip address print')
            '''
        except:
            print "Cannot connect to router via telnet"

    #metoda na prihlasenie pomocou SSH
    def loginSSH(self,login,password):
        from pexpect import pxssh,spawn,expect
        import getpass
        try:
            #self.login = login
            #self.password = password
            connect = pxssh.pxssh()
            server = '172.16.49.2'
            login = 'admin'
            password = 'admin'
            port = 22
            connect.login(server,login,password)
            commands = pxssh.spawn()
            time.sleep(10)
            connect.logout()
            '''
            commands.expect('Please press "Enter" to continue!')
            commands.sendline('\013')
            connect.sendline('/ip address print')
            connect.prompt()
            print connect.before
            '''
        except pxssh.ExceptionPxssh,e:
            print "Error"
            print str(e)


#router = RouterOS('172.16.49.2', 'admin', 'admin')
#router.loginTelnet('admin','admin')


#os.system("mactelnet -l -t 50 > mt.output 2>&1")
#zoznam devicov
deviceList = []
loadMacAddress = False
with open("mt.output", "r") as file:
    for line in file:
        if loadMacAddress:
            macAddress = line.split()[1]
            deviceList.append(macAddress)
        else:
            header = line.split()
            if len(header)>1:
                if "IP" in header[0] and "MAC-Address" in header[1]:
                    loadMacAddress = True

print deviceList
username = 'admin'
password = '""'
os.system('mactelnet {} -u {} -p {}'.format(deviceList[0], username, password))
os.system("interface print")
#print udajue[0][0]

阿德里安


Tags: toimportselfreadadminosconnectlogin
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:58

尝试使用这个mikrotikpython api模块:https://github.com/rtician/routeros。下面的示例取自自述文件.md在回购中:

$ pip install routeros 

我已经用python3.6.4测试过了,它很有效。请注意,必须在RouterOS上的IP->;服务中启用api访问。在

^{pr2}$

输出示例:

({'.id': '*1', 'name': 'dhcp', 'ranges': '192.168.88.10-192.168.88.254'},
 {'.id': '*2', 'name': 'hs-pool-8', 'ranges': '10.5.50.2-10.5.50.254'})

或者使用ansible。有几个库使用ansible通过ssh与Mikrotik路由器通信。在

相关问题 更多 >

    热门问题