python入门简单的 c/s远程操作

实现目标:

通过控制端,可以实现N台主机执行同一操作。

具体代码如下

1、控制端代码

[root@361way tmp]# vim client.py

#!/usr/bin/env python

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上。

相关推荐