共计 1869 个字符,预计需要花费 5 分钟才能阅读完成。
实现目标:
通过控制端,可以实现 N 台主机执行同一操作。
具体代码如下 :
1、控制端代码
[root@361way tmp]# vim client.py | |
import socket,os,sys | |
ost=sys.argv[1] | |
▽ort=4567 | |
for host in os.popen('cat ip.list').readlines(): | |
print host | |
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) | |
s.connect((host,port)) | |
while 1: | |
data=sys.argv[2] | |
if not data: | |
break | |
s.sendall(data) | |
data=s.recv(1024) | |
if not data: | |
break | |
print data | |
s.close() |
2、被控制端代码
[root@localhost tmp]# vim server.py | |
#!/usr/bin/env python | |
import socket,os | |
host='' | |
port=4567 | |
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) | |
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) | |
s.bind((host,port)) | |
s.listen(1) | |
print "Server is running on port %d; press ctrl-c to terminate." % port | |
while 1: | |
clientsock,clientaddr=s.accept() | |
print "connect from %s" % str(clientaddr) | |
clientfile=clientsock.makefile('rw',0) | |
data=clientsock.recv(1024) | |
command=os.popen(data).read() | |
clientfile.write("%s" % command) | |
clientfile.close() | |
clientsock.close() |
3、操作方法
ip.list 里写 server 端的 IP 地址,每行一个,如:
1.1.1.1 | |
2.2.2.2 |
使用方法,将 server.py 部署于目标主机上,执行 server.py;客户端执行 python client.py ip.list “command
“ 即可。示例如下:
[root@361way tmp]# python client.py ip.list ifconfig | |
192.168.0.106 | |
eth0 Link encap:Ethernet HWaddr 52:54:00:D8:F3:E7 | |
inet addr:192.168.0.106 Bcast:192.168.0.255 Mask:255.255.255.0 | |
inet6 addr: fe80::5054:ff:fed8:f3e7/64 Scope:Link | |
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 | |
RX packets:627 errors:0 dropped:0 overruns:0 frame:0 | |
TX packets:262 errors:0 dropped:0 overruns:0 carrier:0 | |
collisions:0 txqueuelen:1000 | |
RX bytes:71041 (69.3 Kb) TX bytes:55281 (53.9 Kb) | |
192.168.0.110 | |
eth0 Link encap:Ethernet HWaddr 52:54:00:D7:F8:E7 | |
inet addr:192.168.0.110 Bcast:192.168.0.255 Mask:255.255.255.0 | |
inet6 addr: fe80::5054:ff:fed7:f8e7/64 Scope:Link | |
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 | |
RX packets:770 errors:0 dropped:0 overruns:0 frame:0 | |
TX packets:438 errors:0 dropped:0 overruns:0 carrier:0 | |
collisions:0 txqueuelen:1000 | |
RX bytes:87223 (85.1 KiB) TX bytes:69993 (68.3 KiB) |
代码已放到 github 上。
正文完
星哥玩云-微信公众号
