基于golang实现telnet远程登录并发送命令源代码实现

news/2024/12/5 7:50:59/
//文件命名为main.go
//package mainimport ("fmt""net""os""strconv""strings""time"
)const WILL = 251
const WONT = 252
const DO = 253
const DONT = 254
const IAC = 255
const RD = 1
const SGA = 3func main() {var n int=0var count int=0var buf [8196]bytevar kkk[100]bytevar srcIP string="0.0.0.0"var timeout int=16var index int=1var params[68] stringfor k:=1;k<len(os.Args);k++{if os.Args[k]=="--interface" || os.Args[k]=="-S" {k++srcIP=os.Args[k]}else if os.Args[k]=="--timeout" || os.Args[k]=="-t" {k++timeout,_=strconv.Atoi(os.Args[k])}else{params[index]=os.Args[k]index++}}var localaddr net.TCPAddrvar remoteaddr net.TCPAddrlocaladdr.IP = net.ParseIP(srcIP)localaddr.Port = 0remoteaddr.IP = net.ParseIP(params[1])remoteaddr.Port,_= strconv.Atoi(params[2])conn, err := net.DialTCP("tcp", &localaddr, &remoteaddr)if err != nil {fmt.Println(err.Error())os.Exit(-1)}conn.SetReadDeadline(time.Now().Add(time.Second * 8))for {n, err = conn.Read(buf[0:])count:=n/3if buf[n-1-1]==byte(':') {fmt.Println(string(buf[0:n]))break}for i:=0;i<count;i++ {iac := buf[i * 3]   cmd := buf[i * 3 + 1]value := buf[i * 3 + 2]if (IAC != iac) {continue;}switch (cmd){case DO:kkk[0]=byte(iac)if value==RD {kkk[1]=byte(WILL)}else{kkk[1]=byte(WONT)}kkk[2]=byte(value)n, err = conn.Write(kkk[0:3])breakcase DONT:kkk[0]=byte(iac)kkk[1]=byte(WONT)kkk[2]=byte(value)n, err = conn.Write(kkk[0:3])breakcase WILL:kkk[0]=byte(iac)if value==SGA {kkk[1]=byte(DO)}else{kkk[1]=byte(DONT)}kkk[2]=byte(value)n, err = conn.Write(kkk[0:3])breakcase WONT:kkk[0]=byte(iac)kkk[1]=byte(DONT)kkk[2]=byte(value)n, err = conn.Write(kkk[0:3])breakdefault:break}}}if strings.Contains(string(buf[0:n]),"ogin:") {n, err = conn.Write([]byte(params[3]+"\r\n"))if err != nil {fmt.Println(err.Error())os.Exit(-1)}    }else{fmt.Println("Error!")os.Exit(-1)}count=0    conn.SetReadDeadline(time.Now().Add(time.Second * 8))for k:=0;k<len(buf);k++{buf[k]=0}for k:=0;k<68;k++ {n, err = conn.Read(buf[count:])if err != nil {fmt.Println(err.Error())break}count += nif strings.Contains(string(buf[0:count]),"assword:") {break}time.Sleep(time.Microsecond * 100000)}fmt.Print(string(buf[0:count]))if strings.Contains(string(buf[0:count]),"assword:") {n, err = conn.Write([]byte(params[3+1]+"\r\n"))if err != nil {fmt.Println(err.Error())os.Exit(-1)}}else{fmt.Println("Error!!!")os.Exit(-1)}conn.SetReadDeadline(time.Now().Add(time.Second * 8))for k:=0;k<68;k++ {n, err = conn.Read(buf[0:])if err != nil {fmt.Println(err.Error())break}fmt.Print(string(buf[0:n]))if strings.Contains(string(buf[0:n]),"# ") {break}time.Sleep(time.Microsecond * 100000)}n, err = conn.Write([]byte(params[5]+"\r\n"))if err != nil {fmt.Println(err.Error())os.Exit(-1)}conn.SetReadDeadline(time.Now().Add(time.Second * time.Duration(timeout)))for k:=0;k<timeout*100;k++ {n, err = conn.Read(buf[0:])if err != nil {fmt.Println(err.Error())break}fmt.Print(string(buf[0:n]))if strings.Contains(string(buf[0:n]),"# ") {break}time.Sleep(time.Microsecond * 10000)}os.Exit(0)
}

//编译命令格式如下:
go build -o telnet.exe main.go

//调用格式如下:
telnet --interface "本机的IP地址" "服务器的IP地址" "用户名" "密码" "要运行的命令行"
其中--interface为可选项


http://www.ppmy.cn/news/1042100.html

相关文章

环形链表笔记(自用)

环形链表 不管怎么样slow最多走半圈了&#xff0c; 快慢指针slow走一步&#xff0c;fast走两步最合适&#xff0c;因为假设fast和slow相差n每一次他们前进&#xff0c;就会相差n-1步&#xff0c;这样他们一定会相遇&#xff0c;如果是环形链表的话。 代码 /*** Definition for…

eNSP:VLAN-hybrid实验应用

实验要求&#xff1a; 拓扑图 配置 sw1: [sw1]vlan batch 2 to 6[sw1]int Ethernet 0/0/2 [sw1-Ethernet0/0/2]port link-type access [sw1-Ethernet0/0/2]port default vlan 2 [sw1-Ethernet0/0/2]int e 0/0/4 [sw1-Ethernet0/0/4]port link-ty access [sw1-Ethernet0/0/…

ld链接文件和startup文件分析和优化--基于RT1176

ld链接文件关系到程序的代码段数据段bss段及其用户自定义段的运行位置&#xff0c;ld文件中的各个段都会在main函数之前&#xff0c;从加载域拷贝到运行域中。本章将具体介绍如何修改ld和startup文件。 软件平台&#xff1a;VSCODEGCC工具链 硬件平台&#xff1a;rt1176开发板…

第一章 初识Linux(含VMware安装Ubuntu、CentOS、Windows、FinalShell、快照)

目录 一、 课程的介绍  1.为什么要学习Linux  2.课程的安排  3.如何学习Linux 二、操作系统概述  1.学习目标  2.计算机的硬件和软件  3.什么是操作系统  4.常见的操作系统  5.本小节的总结 三、初识Linux  1.学习目标  2.Linux的诞生  3.Linux的内核  …

Node.js学习笔记-05

10、测试 测试包含单元测试、性能测试、安全测试和功能测试等几个方面&#xff0c;本章将从Node实践的角度来介绍单元测试和性能测试。 10.1 单元测试 10.1.1 单元测试的意义 开发者自测。对于开发者而言&#xff0c;不仅要编写单元测试&#xff0c;还应当编写可测试代码。…

什么是卷积神经网络

目录 什么是卷积神经网络 全链接相对笨重&#xff1a;大胖子​编辑 ​编辑 参数众多&#xff1a;容易造成过拟合 ​编辑 卷积核&#xff1a;进行图像特征提取&#xff0c;源于卷积原理&#xff1a;求相交面积 卷积的作用 卷积的意义 ​编辑 通过卷积核减少参数 深度卷积…

解决无法访问 Github 问题

GitHub作为程序员访问最频繁的网站&#xff0c;程序员们经常需要访问 Github找开源项目、学习新框架、管理自己的个人开源项目等等。 github加速器 因为GitHub属于国外的网站&#xff0c;直接访问的话&#xff0c;速度非常慢&#xff0c;甚至访问不了&#xff0c; 今天给大家…

【Lua语法】算术、条件、逻辑、位、三目运算符

1.算术运算符 加减乘除取余&#xff1a; - * / % Lua中独有的&#xff1a;幂运算 ^ 注意&#xff1a; 1.Lua中没有自增自减(、–)&#xff0c;也没有复合运算符(、-) 2.Lua中字符串可以进行算术运算符操作&#xff0c;会自动转成number 如&#xff1a;“10.3” 1 结果为11.3…