Python 简单socket模拟ssh
OSI七层模型(Open System Interconnection,开放式系统互联)
应用层
网络进程访问应用层:
为应用程序进程(例如:电子邮件、文件传输和终端仿真)提供网络服务;
提供用户身份验证 表示层
数据表示:
确保接收系统可以读出该数据;
格式化数据;
构建数据;
协商用于应用层的数据传输语法;
提供加密 回话层
主机间通信:
建立、管理和终止在应用程序之间的会话 传输层
传输问题:
确保数据传输的可靠性;
建立、维护和终止虚拟电路;
通过错误检测和恢复;
信息流控制来保证可靠性 网络层
数据传输:
路由数据包;
选择传递数据的最佳路径;
支持逻辑寻址和路径选择 数据链路层
访问介质:
定义如何格式化数据以便进行传输以及如何控制对网络的访问;
支持错误检测 物理层
二进制传输:单位比特
为启动、维护以及关闭物理链路定义了电器规范、机械规范、过程规范和功能
socket 实例化一个套接字
bind 绑定到地址和端口
listen 开始监听
accept 等待wait传入连接
recv 接受数据
send 发送数据(默认发送大小是32768(32k)大小)
sendall 发送所有数据
close 关闭socket
一、简单的通信过程
服务端:
import socket #实例化,绑定,监听,等待,解构(标识,ip-port),接收,回应,关闭
server = socket.socket() server.bind(('localhost',6969))
server.listen()
print('开始监听...') conn,addr = server.accept()
print(conn,addr) data = conn.recv(1024)
print('服务端接收到数据:',data.decode()) conn.send('Hi, i am the server.'.encode()) server.close()
客户端:
import socket #实例化,连接,发送,接收回应,关闭
client = socket.socket() client.connect(('localhost',6969)) client.send('Hi,i am the client.'.encode())
print('发送数据...') data = client.recv(1024)
print('客户端接收到数据:',data.decode()) client.close()
输出结果:
1. 先运行服务端,监听端口,开始等待传入数据:
开始监听...
2. 启动客户端,发送数据,接收响应:
发送数据...
客户端接收到数据: Hi, i am the server.
3. 回到服务端,查看接收到的数据:
开始监听...
<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 55149)> ('127.0.0.1', 55149)
接收到的数据: Hi,i am the client.
二、模拟ssh远程命令执行
服务器端:
import socket
import time
import os #实例化,绑定,监听,等待,解构(标识,ip-port),接收,响应,关闭
server = socket.socket() server.bind(('localhost', 6969))
server.listen(3) #表示当正在处理一个连接时,最多可以按顺序挂起接下来的3个连接(可以理解成排队),如果第4个来连接,过了一定时间就会抛出超时异常:TimeoutError: [Errno 60] Operation timed out
print('开始监听...') try:
while True:
conn,addr = server.accept()
# print(conn,addr)
peerip,peerport = conn.getpeername()
localip,localport = conn.getsockname()
print('{}:{} --> {}:{}'.format(peerip,peerport,localip,localport)) while True:
data = conn.recv(1024)
if not data:
break
print(data.decode())
ret = os.popen(data.decode()).read()
conn.send(ret.encode())
server.close()
except KeyboardInterrupt as e:
print('连接被中断...')
客户端
import socket #实例化,连接,发送,接收响应,关闭
client = socket.socket() client.connect(('localhost',6969))
print('正在连接服务端...') while True:
msg = input('>>>').strip()
# print('正在发送数据...')
if not msg:
continue
client.send(msg.encode())
# print('已发送...') data = client.recv(1024)
if not data:
break
print(data.decode()) client.close()
运行结果:
1. 服务端:
开始监听...
2. 客户端(可以输入执行的命令,接收到服务端返回的执行结果):
正在连接服务端...
>>>ls -l
total 48
-rw-r--r-- 1 zhangsan staff 222 Nov 10 10:37 1.0.py
-rw-r--r-- 1 zhangsan staff 433 Nov 10 16:49 2.0.py
-rw-r--r-- 1 zhangsan staff 158 Nov 10 23:18 error.log
-rw-r--r-- 1 zhangsan staff 437 Nov 11 14:10 socket_client1.py
-rw-r--r-- 1 zhangsan staff 1010 Nov 11 14:21 socket_server1.py
-rw-r--r-- 1 zhangsan staff 608 Nov 10 23:31 异常处理.py >>>ls -l ../
total 0
drwxr-xr-x 7 zhangsan staff 224 Nov 8 12:51 1106
drwxr-xr-x 11 zhangsan staff 352 Nov 9 11:33 1108
drwxr-xr-x 8 zhangsan staff 256 Nov 11 14:21 1110 >>>
3. 服务端:
开始监听...
127.0.0.1:56380 --> 127.0.0.1:6969
ls -l
ls -l ../ #记录执行的命令
协议簇:
AF_INET IPV4
AF_INET6 IPV6
AF_UNIX 本地地址
协议: Protocol
SOCK_STREAM TCP
SOCK_DGRAM UDP
SOCK_RAW 原始套接字,可伪造源IP等数据
Python 简单socket模拟ssh的更多相关文章
- [Python 网络编程] TCP、简单socket模拟ssh (一)
OSI七层模型(Open System Interconnection,开放式系统互联) 应用层 网络进程访问应用层: 为应用程序进程(例如:电子邮件.文件传输和终端仿真)提供网络服务: 提供用户身份 ...
- Socket模拟SSH
Socket模拟SSH 主要思路 客户端发送相关命令到服务端,服务端执行命令(通过subprocess模块实现)然后将结果返回给客户端 小知识 Linux中可以发送空数据,服务端能接受到空数据 win ...
- [Python Study Notes]Socket模拟ssh执行cmd并记录遇到的问题
服务器端: 流程: 1.创建servert实例 2.绑定地址和端口 3.开始监听 4.创建客户端连接实例 5.等待客户端的消息 6.......... # The_author = 'liu66' # ...
- python之socket-ssh实例
本文转载自大王http://www.cnblogs.com/alex3714/articles/5830365.html 加有自己的注释,应该会比原文更突出重点些 一. 基本Socket实例 前面讲了 ...
- python 通过socket实现ssh功能
功能:实现从客户端向服务端发送cmd指令,服务端将结果返回给客户端的功能. #coding:utf-8 '''服务端''' import socket,os server=socket.socket( ...
- Python3学习之路~8.2 socket简单实例 实现ssh 发送大量数据
实例1: 利用socket模拟客户端和服务器端各自收发一次数据: #Author:Zheng Na # 客户端 import socket # 声明socket类型,同时生成socket连接对象 cl ...
- Python socket模拟HTTP请求
0x00 起 最近在做一个对时间要求比较高的扫描器,需要封装一下SOCKET模拟HTTP发包的一些常用函数.简单的说,就是重写一下requests中的get.post方法. 今天在写的时候,遇到一枚很 ...
- 网络编程 - 1.简单的套接字通信/2.加上通信循环/3.bug修复/4.加上链接循环/5.模拟ssh远程执行命令
1.简单的套接字通信 服务端 ''' 服务端 接电话 客户端 打电话 1.先启动服务端 2.服务端有两种套接字 1.phone 用来干接收链接的 2.conn 用来干收发消息的 ''' import ...
- python开发socket套接字:套接字&通信循环&链接循环&模拟远程命令
一,套接字 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接.在这时如果有个客户端初始化一个Socket ...
随机推荐
- Hadoop(五)搭建Hadoop与Java访问HDFS集群
前言 上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat ...
- win10 uwp 获取按钮鼠标左键按下
我们可以使用PointerPressed获得鼠标右键按下,但是我们如何获得左键? 其实UWP已经没有MouseLeftButtonDown,于是我们可以使用一个简单方法去获取鼠标左键按下. 我们在xa ...
- 简易RPC框架-客户端限流配置
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- HTTP 错误 500.19 Internal Server Error的解决方法
第一种可能,能解决一部分问题 http://wenku.baidu.com/view/c5cb4a08bb68a98271fefa3f.html 第二种可能,解决另外一部分问题 经过检查发现是由于先安 ...
- C# 剪贴板中文乱码问题
最近写了个小工具.主要功能是生成一些数据,然后一键复制,最终粘贴到需要的地方. 本来一切正常的,可是当把工具拿给朋友使用时,却被告知粘贴出来的数据是乱码.当时第一时间想到是区域问题(朋友是台湾人),不 ...
- 【译】10分钟学会Pandas
十分钟学会Pandas 这是关于Pandas的简短介绍主要面向新用户.你可以参考Cookbook了解更复杂的使用方法 习惯上,我们这样导入: In [1]: import pandas as pd I ...
- 使用python实现计算器功能
学习python过程中的作业.实现了+.-.×./.及幂运算,支持括号优先级. 代码为python3.5 import re def formatEquation(string): string = ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 批量查询sql脚本
远程批量查询sql脚本 for i in {1..50} do sql_ip=172.168.0.${i} information=`mysql -h ${sql_ip} -uroot -ppas ...
- HDU 6092 Rikka with Subset
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...