回射

SERVER

#!/usr/bin/python3
#_*_ coding:utf- _*_ import socket,os,time
import socketserver
import time
import threading
import random
import sys
import socket
import getopt
import os
import re
import shutil
import platform class ServerHandle(socketserver.BaseRequestHandler): def handle(self): conn = self.request
conn.sendall(bytes("Hello I'm robot!",encoding="utf-8"))
while True:
ret_bytes = conn.recv()
ret_str = str(ret_bytes,encoding="utf-8")
if ret_str == "q":
break
conn.sendall(bytes("You Send:" + ret_str,encoding="utf-8")) def daemonize(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
pid = os.fork()
if pid > :
sys.exit() os.chdir("/")
os.umask()
os.setsid() pid = os.fork()
if pid > :
sys.exit() for f in sys.stdout, sys.stderr: f.flush()
si = open(stdin, 'r')
so = open(stdout, 'a+')
#se = open(stderr, 'a+', )
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
#os.dup2(se.fileno(), sys.stderr.fileno()) if __name__ == "__main__":
daemonize('/dev/null', '/home/share/kitking/stdout.log', '/home/share/kitking/error.log')
server = socketserver.ThreadingTCPServer(("192.168.199.XXX",),ServerHandle)
server.serve_forever()

CLIENT

#!/usr/bin/python3
#_*_ coding:utf- _*_ import socket,os,time
import socketserver host = "XXX.eicp.net"
ip = socket.gethostbyname(host)
port = obj = socket.socket()
obj.connect((ip,port)) ret_bytes = obj.recv()
ret_str = str(ret_bytes,encoding="utf-8")
print(ret_str) while True:
inp = input(">>")
if inp == "q":
obj.sendall(bytes(inp,encoding="utf-8"))
break
else:
obj.sendall(bytes(inp, encoding="utf-8"))
ret_bytes = obj.recv()
ret_str = str(ret_bytes,encoding="utf-8")
print(ret_str)

SSH模拟

SERVER

import socket,os,time
server = socket.socket()
server.bind(('localhost',)) server.listen() while True:
print("beging waiting request...")
conn,addr = server.accept()
print("new conn:",addr)
while True:
print("request comming!",addr)
data = conn.recv()
if not data:
print("客户端已断开")
break
print("执行指令:",data)
cmd = data.decode()
cmd_res = os.popen(cmd).read()
print("before send",len(cmd_res.encode('utf-8')))
if len(cmd_res) == :
com_res = "cmd has no output..."
conn.send(str(len(cmd_res.encode('utf-8'))).encode('utf-8'))
#time.sleep(0.5)
client_ack = conn.recv() #wait client confirm
conn.send(cmd_res.encode("utf-8"))
print("send done")
server.close()

CLIENT

import socket
client = socket.socket()
client.connect(('localhost',)) while True:
cmd = input(">>").strip()
if len(cmd) == :continue
client.send(cmd.encode("utf-8"))
cmd_res_size = client.recv()
client.send(b"start_trans")
sev_file_size = int(cmd_res_size.decode())
#print('sev_file_size',sev_file_size,type(sev_file_size))
received_size =
received_data = b'' while received_size < sev_file_size:
data = client.recv()
#print("收到数据!")
received_size += len(data)
received_data += data
#print('cli_file_size',received_data)
else:
#print("receive done...",received_size)
print(received_data.decode()) client.close()

文件传送

SERVER

import socket,os,time,hashlib
server = socket.socket()
server.bind(('localhost',)) server.listen() while True:
print("beging waiting request...")
conn,addr = server.accept()
print("new conn:",addr)
while True:
print("request comming!",addr)
data = conn.recv()
if not data:
print("客户端已断开")
break
cmd,filename = data.decode().split()
if os.path.isfile(filename):
f = open(filename,'rb')
m = hashlib.md5()
file_size = os.stat(filename).st_size
conn.send(str(file_size).encode('utf-8')) #send file size
conn.recv() #wait for ack
for line in f:
m.update(line)
conn.send(line)
print("file md5",m.hexdigest())
f.close()
conn.send(m.hexdigest().encode()) print("send done")
server.close()

CLIENT

import socket,hashlib
client = socket.socket()
client.connect(('localhost',)) while True:
cmd = input(">>").strip()
if len(cmd) == :continue
if cmd.startswith('get'):
client.send(cmd.encode('utf-8'))
server_response = client.recv()
print('server response:',server_response)
client.send(b'start to trans')
file_total_size = int(server_response.decode())
received_size =
file_name = cmd.split()[]
f = open(file_name+".new",'wb')
m = hashlib.md5()
while received_size < file_total_size:
if file_total_size - received_size >= :
size =
else:
size = file_total_size - received_size
data = client.recv(size)
received_size += len(data)
m.update(data)
f.write(data)
#print(file_total_size,received_size)
else:
new_file_md5 = m.hexdigest()
print("file recv done",received_size,file_total_size)
f.close()
server_file_md5 = client.recv()
print("server file md5:",server_file_md5)
print('client file md5:',new_file_md5) client.close()

FTP模式

SERVER

import socket,hashlib
import socketserver,json,os class MyTCPHandler(socketserver.BaseRequestHandler): def put(self,*args):
cmd_dic = args[]
filename = cmd_dic['filename']
filesize = cmd_dic['filesize']
if os.path.isfile(filename):
f = open(filename + ".new",'wb')
else:
f = open(filename,'wb')
self.request.send(b'200,ok')
recived_size =
m = hashlib.md5()
while recived_size < filesize:
data = self.request.recv()
m.update(data)
f.write(data)
recived_size += len(data)
else:
f.close()
print("file [%s] has uploaded..."%filename)
recived_md5 = m.hexdigest()
source_md5 = self.request.recv().decode()
if recived_md5 == source_md5:
self.request.send('MD5校验成功'.encode('utf-8'))
else:
self.request.send('MD5校验失败'.encode('utf-8')) def handle(self):
while True:
try:
print("开始监听!")
self.data = self.request.recv().strip()
print("{} wrote:".format(self.client_address[]))
print(self.data)
if not self.data:
print(self.client_address,"断开了!")
break
cmd_dic = json.loads(self.data.decode())
action = cmd_dic['action']
if hasattr(self,action):
func = getattr(self,action)
func(cmd_dic) except ConnectionRefusedError as e:
print(e)
break if __name__ == "__main__":
HOST,PORT="localhost",
server = socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()

CLIENT

import socket
import os,json
import hashlib class FtpClient(object):
def __init__(self):
self.client = socket.socket() def cmd_help(self,args):
msg = '''
ls
pwd
cd
get filename
put filename
'''
print(msg) def connect(self,ip,port):
self.client.connect((ip,port)) def interactive(self):
self.auth()
while True:
cmd = input(">>").strip()
if len(cmd) == :continue
cmd_str = cmd.split()[]
if hasattr(self,'cmd_%s'%cmd_str):
func = getattr(self,'cmd_%s'%cmd_str)
func(cmd)
else:
self.help() def cmd_put(self,*args):
cmd_split = args[].split()
if len(cmd_split) > :
filename = cmd_split[]
os.path.isfile(filename)
filesize = os.stat(filename).st_size
msg_dic = {
'action': 'put',
'filename': filename,
'filesize': filesize,
'overridden': True
}
self.client.send(json.dumps(msg_dic).encode('utf-8'))
server_response = self.client.recv()
f = open(filename,'rb')
m = hashlib.md5()
for line in f:
m.update(line)
self.client.send(line)
else:
print("file upload success...")
f.close()
self.client.send(m.hexdigest().encode())
sev_md5_check = self.client.recv()
print(sev_md5_check.decode())
else:
print('file is not exist') def cmd_get(self):
pass def auth(self):
pass class Account(object):
def __init__(self):
pass ftp = FtpClient()
ftp.connect('localhost',)
ftp.interactive()

上传文件

import socket

sk = socket.socket()

sk.bind(("127.0.0.1",))
sk.listen() while True:
conn,address = sk.accept()
conn.sendall(bytes("欢迎光临我爱我家",encoding="utf-8")) size = conn.recv()
size_str = str(size,encoding="utf-8")
file_size = int(size_str) conn.sendall(bytes("开始传送", encoding="utf-8")) has_size =
f = open("db_new.jpg","wb")
while True:
if file_size == has_size:
break
date = conn.recv()
f.write(date)
has_size += len(date) f.close() 客户端 import socket
import os obj = socket.socket() obj.connect(("127.0.0.1",)) ret_bytes = obj.recv()
ret_str = str(ret_bytes,encoding="utf-8")
print(ret_str) size = os.stat("yan.jpg").st_size
obj.sendall(bytes(str(size),encoding="utf-8")) obj.recv() with open("yan.jpg","rb") as f:
for line in f:
obj.sendall(line)

Python Socke的更多相关文章

  1. python的socke编程

    python的sock编程分为TCP编程和UDP编程,两者不同在于,TCP需要首先建立连接才能发送接收数据,而UDP则可以直接发送接收不需要预先建立连接. tcp编程,我总结为4步 TCP的serve ...

  2. python之路(十一)-socke开发

    socket简介 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...

  3. python sokct 包详解

    1. getaddrinfo简介getaddrinfo可解析得到IPv6地址,而gethostbyname仅能得到IPv4地址.getaddrinfo在Python的socket包中,以下为pytho ...

  4. python学习笔记11 ----网络编程

    网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...

  5. python高级之网络编程

    python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说 ...

  6. python学习笔记七 初识socket(进阶篇)

    socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  7. [python]逆水行舟不进则退(1)

    工作后迎来的第一个长假期,打算在家休息一下,看看书之类的.但是不写点东西,不做点东西,感觉有些浪费时间.同时也想通过做点东西检验下自己这段时间的收获.其实在我开始写这篇文章的时候心里还是很没底的-交代 ...

  8. python学习笔记 - 初识socket

    socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  9. 第六篇:python高级之网络编程

    python高级之网络编程   python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及 ...

随机推荐

  1. Linux下记录所有用户的登录和操作日志

    Linux下记录所有用户的登录和操作日志   一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的 ...

  2. superset dashboard 设置自动刷新

    因为发现了,自己制作了看板dashboard,却不会刷新,很奇怪. 那这样不是太傻了.难道要业务人员一个个去点吗? 一定有刷新的,然后和无头苍蝇在网上找了半天. 实际刷新的位置在这里. 具体设置有很多 ...

  3. 前端开发必备 - Emmet

    介绍 Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的一个工具. 基本上,大多数的文本编辑器都会允许你存储和重用一些代码块,我们称之为"片段".虽然片 ...

  4. 010PHP基础知识——运算符(三)

    <?php /** * 位运算符: * 1:&按位与:左右两边的数,同位都为1,返回是1,否则返回是0 */ /*$a = 5; $b = 6; $a = decbin($a);//10 ...

  5. html表格导出Excel的一点经验心得(转载)

    最近在做统计功能,要求统计结果(表格)既能查看(BS系统,在浏览器查看),又能输出为excel文件.对于输出excel文件,在网上找到n种方案,因为还需查看,最终选择了统计结果输出为table,查看时 ...

  6. HDU 5793 A Boring Question (找规律 : 快速幂+乘法逆元)

    A Boring Question Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  7. Sql sever 事务

    SQL事务 一.事务概念    事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是一个不可分割的工作逻辑单元.在数据库系统上执行并发操作时事务 ...

  8. LeetCode OJ : Different Ways to Add Parentheses(在不同位置增加括号的方法)

    Given a string of numbers and operators, return all possible results from computing all the differen ...

  9. django中如何将多个app归到一个目录下。

    1.当startapps 生成多个app后,为了便于管理,可新建一个apps目录,把应用全部剪切进apps. 如果是在pycharm中,会提示是否自动更新路径,这里要全部选择取消. QQ群交流:697 ...

  10. asp下去除数组中重复的项的方法

    <%Function MoveR(Rstr) Dim i,SpStr SpStr = Split(Rstr,",") For i = 0 To Ubound(Spstr) I ...