python中socket修改ttl_Python socket套接字实现C/S模式远程命令执行功能案例

本文展示了如何使用Python的socket库创建C/S模式的远程命令执行脚本。通过`serverCmd.py`在远程服务器上执行客户端`clientCmd.py`发送的命令,如`cmd ipconfig`等。服务器监听指定端口,接收并执行命令,当收到'close session'指令时关闭会话。
摘要由CSDN通过智能技术生成

本文实例讲述了Python socket套接字实现C/S模式远程命令执行功能。分享给大家供大家参考,具体如下:

一. 前言

要求:

使用python的socket套接字编写服务器/客户机模式的远程命令执行脚本。

serverCmd.py 远程机器上用来执行客户端发送命令的脚本

clientCmd.py 本地机器上,向远程服务器发送命令的脚本

servers.txt  本地机器上,存放所有的远程服务器IP地址文件(仅支持第一个IP)

发送:cmd [command]形式消息,让远程主机执行命令(本地主机无回显)

发送:close session消息,双方关闭会话。

二. 源码

下载地址: 点击此处本站下载。

注:

1. 代码注释较少,建议有一定套接字编程基础。

2. 或者直接简单部分修改IP使用。

3. clientCmd.py和servers.txt(修改IP地址后)放在同一目录。

4.程序为简单Demo,仅为学习记录。

serverCmd.py

#!/usr/bin/env python

# coding:utf-8

# Build by LandGrey

#

import time

import socket

import threading

import traceback

import subprocess

def parsecmd(strings):

midsplit = str(strings).split(" ")

if len(midsplit) >= 2 and midsplit[0] == "cmd":

try:

command = subprocess.Popen(strings[4:], shell=True)

command.communicate()

print "\n"

except Exception, e:

print e.message

traceback.print_exc()

def recvdata(port):

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

s.bind(('', port))

s.listen(1)

print "[+] Server is running on port:%s at %s" % (str(port), time.strftime("%Y%m%d %H:%M:%S", time.localtime()))

while True:

mainsocket, mainhost = s.accept()

print "[+] Connect success -> %s at %s" % (str(mainhost), time.strftime("%Y%m%d %H:%M:%S", time.localtime()))

if mainhost:

while True:

data = mainsocket.recv(1024)

if data:

print "[+] Receive:%s" % data

mainsocket.sendall("[Server]success")

parsecmd(data)

if data == "close session":

mainsocket.close()

print "[+] Quit success"

break

break

if __name__ == "__main__":

# some public variable

connPort = 47091

onethreads = threading.Thread(target=recvdata, args=(connPort,))

onethreads.start()

clientCmd.py

#!/usr/bin/env python

# coding:utf-8

# Build by LandGrey

#

import time

import socket

def readtarget():

global server_list

with open(r"servers.txt") as f:

for line in f.readlines():

if line[0:1] != "#" and len(line.split(".")) == 4:

server_list.append(line)

def connserver(host, port):

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host, port))

while True:

print "\n[*] Please input command:"

data = raw_input()

if not data:

break

s.sendall(data)

recvdata = s.recv(1024)

print "[+] Send %s:%s -> %s" % (host, str(connPort), data)

time.sleep(0)

if recvdata:

print "[+] Receive :%s" % recvdata

if data == "close session":

s.close()

break

if __name__ == "__main__":

server_list = []

connPort = 47091

readtarget()

if server_list != []:

for host in server_list:

connserver(host, connPort)

servers.txt

# server ip list

192.168.0.139

三. 运行效果

python serverCmd.py

[+] Server is running on port:47091 at 20161013 17:50:19

[+] Connect success -> ('192.168.0.241', 4255) at 20161013 17:50:32

[+] Receive:hello

[+] Receive:你好

[+] Receive:cmd ip

'ip' 不是内部或外部命令,也不是可运行的程序

或批处理文件。

[+] Receive:cmd ipconfig

Windows IP 配置

以太网适配器 本地连接:

连接特定的 DNS 后缀 . . . . . . . :

本地链接 IPv6 地址. . . . . . . . : ****::****:****:****:*******

IPv4 地址 . . . . . . . . . . . . : 192.168.0.139

子网掩码  . . . . . . . . . . . . : 255.255.255.0

默认网关. . . . . . . . . . . . . : 192.168.0.1

隧道适配器 isatap.{****-6122-4F83-8828-****}:

媒体状态  . . . . . . . . . . . . : 媒体已断开

连接特定的 DNS 后缀 . . . . . . . :

[+] Receive:cmd ping www.baidu.com

正在 Ping www.a.shifen.com [180.97.33.108] 具有 32 字节的数据:

来自 180.97.33.108 的回复: 字节=32 时间=66ms TTL=36

来自 180.97.33.108 的回复: 字节=32 时间=66ms TTL=36

来自 180.97.33.108 的回复: 字节=32 时间=64ms TTL=36

来自 180.97.33.108 的回复: 字节=32 时间=65ms TTL=36

180.97.33.108 的 Ping 统计信息:

数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

最短 = 64ms,最长 = 66ms,平均 = 65ms

[+] Receive:要结束了

[+] Receive:close session

[+] Quit success

python clientCmd.py

[*] Please input command:

hello

[+] Send 192.168.0.139:47091 -> hello

[+] Receive :[Server]success

[*] Please input command:

你好

[+] Send 192.168.0.139:47091 -> 你好

[+] Receive :[Server]success

[*] Please input command:

cmd ip

[+] Send 192.168.0.139:47091 -> cmd ip

[+] Receive :[Server]success

[*] Please input command:

cmd ipconfig

[+] Send 192.168.0.139:47091 -> cmd ipconfig

[+] Receive :[Server]success

[*] Please input command:

cmd ping www.baidu.com

[+] Send 192.168.0.139:47091 -> cmd ping www.baidu.com

[+] Receive :[Server]success

[*] Please input command:

要结束了

[+] Send 192.168.0.139:47091 -> 要结束了

[+] Receive :[Server]success

[*] Please input command:

close session

[+] Send 192.168.0.139:47091 -> close session

[+] Receive :[Server]success

希望本文所述对大家Python程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值