zoukankan      html  css  js  c++  java
  • python2批量改密码

    客户端代码:

    如果注释最下面三行socket发送,可以直接在本机修改密码不发送数据到服务端。

    # -*- coding: utf-8 -*-
    #author:Guoyabin
    import random
    import string
    import os
    from socket import * 
    
    serverip = '10.1.2.221'
    port = 9999
    buffersize = 1024
    addr = (serverip,port)
    client = socket(AF_INET,SOCK_STREAM)
    client.connect(addr)
    
    def Psswd(length):
        chars=string.ascii_letters+string.digits
        return ''.join([random.choice(chars) for i in range(length)])
    def get_wanip_info():
        get_ip_cmd="ip add |awk '/10.1/ {print $2}'|grep -oP '(d+.){3}d+'"
        ethip=os.popen(get_ip_cmd).readline().strip()
        return ethip
    #密码长度
    passwd = Psswd(18)
    username = 'root'
    try:
        os.system('echo %s | /usr/bin/passwd --stdin %s' %(passwd,username))
        print get_wanip_info(),'=>',passwd
        print "root passwd change success!!!!"
    except:
        print "root passwd change error!!!!"
    data = str(get_wanip_info()+'=>'+passwd)
    client.send('%s
    ' % str(get_wanip_info()+'=>'+passwd))
    client.close()
    
    

      

    本着方便的原则,增加服务端用来接收密码。使运维管理员更方便批量执行脚本,修改密码。

    # -*- coding: utf-8 -*-
    #author:Guoyabin
    import socket
    import threading
    import time
    
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #监听端口:
    server.bind(('10.1.2.221', 9999))
    server.listen(10)
    print('Waiting for connection...')
    def tcplink(sock, addr):
        while True:
            data = sock.recv(1024)
            time.sleep(1)
            if not data or data.decode('utf-8') == 'exit':
                break
            #为防止恶意telnet发送数据包,增加=>验证。
            if '=>' not in data:
                break
            print data
            savepasswd(data)
        sock.close()
    
    def savepasswd(passwd):
        now=time.strftime("%Y-%m-%d %H:%M:%S")
        errfile=open('passwd.txt','a')
        errfile.write(now+' '+str(passwd))
        errfile.close()
    
    while True:
        # 接受一个新连接:
        sock, addr = server.accept()
        # 创建新线程来处理TCP连接:
        t = threading.Thread(target=tcplink, args=(sock, addr))
        t.start()
    

    服务器端改良版,使用socketserver模块替代socket。让多线程io程序更健壮一些。

    使用下面代码,替换上面服务端代理

    # -*- coding:utf-8 -*-
    #author:Guoyabin
    import socketserver
    import time
    
    class recvpasswd(socketserver.BaseRequestHandler):
    	def handle(self):
    		conn=self.request #封装所有对象请求
    		while True:
    			date=conn.recv(1024).decode()
    			if date=='exit':
    				break
    			if len(date)==0: #空数据则断开
    				break
    			if '=>' not in date: #防止恶意数据写入
    				break
    			#print(self.client_address,date)
    			self.savepasswd(date)
    			
    	def savepasswd(self,passwd):
    		now=time.strftime("%Y-%m-%d %H:%M:%S")
    		errfile=open('passwd.txt','a')
    		errfile.write(now+' '+str(passwd))
    		errfile.close()
    		
    if __name__=='__main__':
    	server=socketserver.ThreadingTCPServer(('0.0.0.0',9999),recvpasswd)
    	server.serve_forever()
    

      

  • 相关阅读:
    元素查找
    合并果子 2004年NOIP全国联赛普及组
    队列练习1,2,3
    山峰
    栈练习1,2,3
    天使之城
    括号序列
    布尔表达式
    逆波兰表达式
    旅行家的预算 1999年NOIP全国联赛普及组NOIP全国联赛提高组
  • 原文地址:https://www.cnblogs.com/guoyabin/p/7761153.html
Copyright © 2011-2022 走看看