1.用python实现一个查看某网段所有主机的状态(3秒实现)
#vim ping.py
import subprocess import threading def ping(host): result = subprocess.call( 'ping -c2 %s &> /dev/null' % host, shell=True ) if result == 0: print "%s:up" % host else: print "%s:down" % host if __name__ == '__main__': ips = ['172.40.55.%s' % i for i in range(1, 255)] for ip in ips: t = threading.Thread(target=ping, args=(ip,)) t.start()
[root@room1pc01 桌面]# python mtping.py 172.40.55.1:up 172.40.55.66:up 172.40.55.6:down 172.40.55.114:up 172.40.55.2:down 172.40.55.3:down 172.40.55.115:up 。。。。。
2.利用ssh实现多线程并发访问(可以同时创建删除,该密码等)
[root@room1pc01 ~]# yum install -y python-paramiko
#vim allhost.py
import getpass import os import paramiko import sys import threading def remote_comm(host, passwd, comm, user='root'): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(host, username=user, password=passwd) stdin, stdout, stderr = ssh.exec_command(comm) out = stdout.read() err = stderr.read() if out: print '[out]%s:\n%s' % (host, out), if err: print '[error]%s:\n%s' % (host, err), ssh.close() if __name__ == '__main__': if len(sys.argv) != 3: print "Usage: %s ipfile 'command'" % sys.argv[0] sys.exit(1) if not os.path.isfile(sys.argv[1]): print "No such file:", sys.argv[1] sys.exit(2) ipfile = sys.argv[1] command = sys.argv[2] pwd = getpass.getpass() with open(ipfile) as fobj: for line in fobj: ip = line.strip() t = threading.Thread(target=remote_comm, args=(ip, pwd, command)) t.start()
#vim ipaddr.txt
192.168.4.1 192.168.4.2 192.168.4.3 192.168.4.4
[root@room1pc01 桌面]# python remote_comm.py ipaddr.txt tedu.cn 'useradd bob'