Python telnetlib.expect() 点字符'.'没有按预期工作
Python telnetlib.expect() dot character '.' not working as expected
我正在尝试自动化通用 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()
我认为下面一行:
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
结尾因为:
.
我正在尝试自动化通用 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()
我认为下面一行:
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
结尾因为:
.