Python telnetlib.expect()点字符'。'没有按预期工作

时间:2016-08-30 00:44:01

标签: python regex telnet telnetlib

我正在尝试自动化通用telnet连接。我在很大程度上依赖REGEX来处理不同的登录提示。目前,我正在使用正则表达式[Ll]ogin,但提示我出现问题的提示是标准的Ubuntu提示符:

b-davis login: 
Password:
Last login: Mon Aug 29 20:28:24 EDT 2016 from localhost on pts/5

因为提到两次登录这个词。现在我认为应该解决这个问题的正则表达式[Ll]ogin.{0,3}$,但它停止了所有的匹配。我尝试了一些更简单的[Ll]ogin.,它应该产生与[Ll]ogin相同的结果,但它没有!

我正在使用字节串,因为如果我没有,python会抛出TypeError。我觉得这个问题存在于与正则表达式无关的地方,所以这里是整段代码:

import telnetlib
import re
pw = "p@ssw0rd"
user = "bdavis"
regex = [
    b"[Ll]ogin.",  # b"[Ll]ogin" works here
    b"[Pp]assword",
    b'>',
    b'#']

tn = telnetlib.Telnet("1.2.3.4")

while type(tn.get_socket()) is not int:
    result = tn.expect(regex, 5)  # Retrieve send information
    s = result[2].decode()

    if re.search("[Ll]ogin$",s) is not None:
        print("Do login stuff")
        print(result)
        tn.write((user + "\n").encode())  # Send Username
    elif re.search("[Pp]assword",s) is not None:
        print("Do password stuff")
        tn.write((pw + "\n").encode())  # Send Password
    elif re.search('>',s) is not None:
        print("Do Cisco User Stuff")
        tn.write(b"exit\n")  # exit telnet
        tn.close()
    elif re.search('#',s) is not None:
        print("Do Cisco Admin Stuff")
    else:
        print("I Don't understand this, help me:")
        print(s)
        tn.close()

1 个答案:

答案 0 :(得分:0)

我认为以下几行:

if re.search("[Ll]ogin$",s) is not None:

应替换为:

if re.search("[Ll]ogin", s) is not None:  # NOTE: No `$`

使用简单的字符串操作:

if 'login' in s.lower():

因为匹配的部分不会因ogin而以:结尾。