编写代码登录telnet

问题背景

接到一个需求, 使用telnet登录某机器, 然后执行一些命令, 将执行后的结果导出。

实现

使用go实现

  • 方案一, 使用exec.Command
    在进入telnet后, 部分输出无法读取, 无法进行下去
  • 直接使用socket通信, 按照telnet协议的格式发消息, 收消息.
    理论上这个肯定是可以的, 但是对telnet协议不熟悉, 自信不够.
    摸索了半天, 后来放弃了
  • 借助gexpect
    这个确实可以, 在我自己的虚拟机上运行成功了. 但是在测试环境服务器上一直不成功, 不懂为什么, 后来无奈放弃了.

使用Python实现

不得不说, python轮子真是多,有个叫telnetlib的库, 就几行代码就可以登录:

# commands是要执行的命令列表
def pull_config_by_telnet(host ='',
					port = 23,
					username = '',
					password = '',
					username_prompt ='username:',
					password_prompt ='password:',
					commands = []):
	result = ''
	try:
		tn = telnetlib.Telnet(host, port)
		
		# input username
		tn.read_until(username_prompt)
		tn.write(username + "\n")
		
		# input password
		tn.read_until(password_prompt)
		tn.write(password + "\n")
		
		for cmd in commands:
			tn.write(cmd + "\n")
				
		# time.sleep(1) # 这个不用可以吗?
		tn.write("exit\n")

		result = tn.read_all()
	except Exception as e:
		stderr_write("err occourred when pull_config_by_telnet:", e)
		result = ''
	finally:
		tn.close()
		return result

总结

  • 找到合适的工具, 工作才能更高效,
  • 不要重复造轮子
  • 没事多学学底层(网络, 算法, 操作系统…)

欢迎补充指正!

发布了231 篇原创文章 · 获赞 77 · 访问量 52万+

猜你喜欢

转载自blog.csdn.net/butterfly5211314/article/details/97485432