commit
f34792c223
3 changed files with 137 additions and 0 deletions
@ -0,0 +1,44 @@ |
|||||||
|
#!/bin/sh |
||||||
|
CheckIPAddr() |
||||||
|
{ |
||||||
|
echo ${1} | grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$" > /dev/null; |
||||||
|
if [ $? -ne 0 ] ;then |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
ipaddr=${1} |
||||||
|
a=$( echo ${ipaddr} | awk -F . '{print $1}' ) |
||||||
|
b=$( echo ${ipaddr} | awk -F . '{print $2}' ) |
||||||
|
c=$( echo ${ipaddr} | awk -F . '{print $3}' ) |
||||||
|
d=$( echo ${ipaddr} | awk -F . '{print $4}' ) |
||||||
|
for num in ${a} ${b} ${c} ${d} ; do |
||||||
|
if [ ${num} -gt 255 ] || [ ${num} -lt 0 ]; then |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
done |
||||||
|
return 0 |
||||||
|
} |
||||||
|
|
||||||
|
main() |
||||||
|
{ |
||||||
|
if [ $# -lt 4 ];then |
||||||
|
echo "Usage: ./pingctrl.sh <ip> <count> <interval> <timeout>" |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
CheckIPAddr ${1} |
||||||
|
if [ $? -ne 0 ];then |
||||||
|
echo 'the IP address is illegal' |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
while : |
||||||
|
do |
||||||
|
ping $1 -c $2 -W $4 > /dev/null; |
||||||
|
if [ $? -ne 0 ];then |
||||||
|
echo "host are not reachable" |
||||||
|
reboot |
||||||
|
break; |
||||||
|
fi |
||||||
|
sleep $3 |
||||||
|
done |
||||||
|
} |
||||||
|
|
||||||
|
main $@ |
@ -0,0 +1,31 @@ |
|||||||
|
# TOOLS |
||||||
|
|
||||||
|
保存一些杂项,系统调试脚本 |
||||||
|
|
||||||
|
## 1.pingctrl.sh |
||||||
|
|
||||||
|
功能:循环Ping给定主机ip,若出现ping失败则立即重启系统。 |
||||||
|
用法: pingctrl.sh `<ip>` `<count>` `<interval>` `<timeout>` |
||||||
|
参数说明: |
||||||
|
ip: 要ping的远程主机ip |
||||||
|
count: 每次要Ping的次数,只要有一次成功就视为ping成功 |
||||||
|
interval: 每次ping的时间间隔(单位:秒) |
||||||
|
timeout: 超时时间(单位:秒) |
||||||
|
|
||||||
|
## 2.remote-reboot.py |
||||||
|
|
||||||
|
功能:使用telnet登录远程主机并发送一条reboot命令,连接成功返回0,失败返回-1 |
||||||
|
|
||||||
|
用法: python3 remote-reboot.py `<ip> <port> <username> <passwd>` |
||||||
|
|
||||||
|
参数说明: |
||||||
|
|
||||||
|
ip: 连接的远程主机ip 默认192.168.10.100 |
||||||
|
|
||||||
|
port: telnet连接端口号 默认 23 |
||||||
|
|
||||||
|
username: 登录用户名 默认 root |
||||||
|
|
||||||
|
passwd: 密码 默认 root |
||||||
|
|
||||||
|
脚本未对参数进行校验,传参时可以只传入ip和端口号,此时脚本会用默认的用户密码进行连接。但如果需要修改用户名密码,无论ip和端口号是否是默认值,都需要手动传入。 |
@ -0,0 +1,62 @@ |
|||||||
|
import telnetlib |
||||||
|
import sys |
||||||
|
|
||||||
|
HOST = "192.168.10.100" |
||||||
|
PORT = 23 |
||||||
|
USERNAME = "root" |
||||||
|
PASSWORD = "root" |
||||||
|
|
||||||
|
def main(argv): |
||||||
|
host = HOST |
||||||
|
port = PORT |
||||||
|
username = USERNAME |
||||||
|
passwd = PASSWORD |
||||||
|
if len(argv) > 2 : |
||||||
|
host = argv[1] |
||||||
|
port = argv[2] |
||||||
|
if len(argv) > 4: |
||||||
|
username = str(argv[3]) |
||||||
|
passwd = str(argv[4]) |
||||||
|
# 创建 Telnet 对象并连接远程主机 |
||||||
|
tn = telnetlib.Telnet(host, port) |
||||||
|
print(tn.host) |
||||||
|
|
||||||
|
# 匹配登录提示并发送用户名 |
||||||
|
tn.read_until(b"login: ") |
||||||
|
tn.write(username.encode('ascii') + b"\r\n") |
||||||
|
|
||||||
|
# 匹配密码提示并发送密码 |
||||||
|
tn.read_until(b"Password: ") |
||||||
|
tn.write(passwd.encode('ascii') + b"\r\n") |
||||||
|
|
||||||
|
# 匹配登录后的提示符 |
||||||
|
prompt = "#" |
||||||
|
match_index, _, _ = tn.expect([prompt.encode('ascii')], timeout=5) |
||||||
|
|
||||||
|
# 判断是否成功匹配 |
||||||
|
if match_index != -1: |
||||||
|
print("登录成功!") |
||||||
|
else: |
||||||
|
print("登录失败!") |
||||||
|
return -1 |
||||||
|
|
||||||
|
# 连接成功后,可以继续与远程主机进行交互 |
||||||
|
# 例如,发送命令并接收输出 |
||||||
|
tn.write(b"reboot\r\n") |
||||||
|
try: |
||||||
|
command_output = b"" |
||||||
|
while True: |
||||||
|
line = tn.read_until(b"\n") |
||||||
|
command_output += line |
||||||
|
if b"expected_output" in line: |
||||||
|
break |
||||||
|
print(command_output.decode("utf-8")) |
||||||
|
except Exception as e: |
||||||
|
print(e) |
||||||
|
|
||||||
|
# 关闭 Telnet 连接 |
||||||
|
tn.close() |
||||||
|
return 0 |
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
main(sys.argv) |
Loading…
Reference in new issue