Python Socke
回射
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的更多相关文章
- python的socke编程
python的sock编程分为TCP编程和UDP编程,两者不同在于,TCP需要首先建立连接才能发送接收数据,而UDP则可以直接发送接收不需要预先建立连接. tcp编程,我总结为4步 TCP的serve ...
- python之路(十一)-socke开发
socket简介 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...
- python sokct 包详解
1. getaddrinfo简介getaddrinfo可解析得到IPv6地址,而gethostbyname仅能得到IPv4地址.getaddrinfo在Python的socket包中,以下为pytho ...
- python学习笔记11 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- python高级之网络编程
python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说 ...
- python学习笔记七 初识socket(进阶篇)
socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- [python]逆水行舟不进则退(1)
工作后迎来的第一个长假期,打算在家休息一下,看看书之类的.但是不写点东西,不做点东西,感觉有些浪费时间.同时也想通过做点东西检验下自己这段时间的收获.其实在我开始写这篇文章的时候心里还是很没底的-交代 ...
- python学习笔记 - 初识socket
socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- 第六篇:python高级之网络编程
python高级之网络编程 python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及 ...
随机推荐
- Python中面向对象的一些关于私有变量和继承的理解
成员可见性,变量和方法的可见性.使用“__”开头的变量和方法为私有变量和方法 class Student(): def __init__(self, name, age): # 构造函数 # 初始化变 ...
- -Linux下的虚拟机安装与管理
一.虚拟机安装 首先安转之前,要提前下载一个镜像,这里是:rhel-server-7.0-x86_64-dvd.iso 1)图形化方法 [1]在本机打开终端,切换到超级用户下.输入命令:virt-ma ...
- Android.mk编译的写法
更多Android.mk的 用法见 :http://blog.csdn.net/fengbingchun/article/details/38705519 如何修改Android.mk 为Androi ...
- Gradle 1.12用户指南翻译——第六十五章. Maven 发布(新)
其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...
- localhost与127.0.0.1之间的区别
Localhost的意思是本地服务器,而127.0.0.1是本机地址,他们的关系是通过操 作系统中的hosts文件,将Localhost解析为127.0.0.1.而实际工作中,Localhost是不经 ...
- Objective C - 2 - 随机数,可变字符串,字符串,SubString
int main(int argc, const char * argv[]) { @autoreleasepool { NSString *outputString = @"1234567 ...
- redis状态监控与性能调优
本文主要介绍及演示一些Redis相关的状态监控和性能调优的命令及使用方法: 1.redis-benchmark redis基准信息,redis服务器性能检测 例如: 检测redis服务器性能,本机63 ...
- AE编码、稀疏编码(待续)
http://ufldl.stanford.edu/tutorial/unsupervised/SparseCoding/
- java程序编写需注意的问题
初学java,免不了很多注意事项 加分号 类名与文件名一致 javac fileName而非javac fileName.class ```java System.out.println(" ...
- [转载][QT][SQL]sql学习记录3_sqlite之update delete like
转载自:详见 : http://www.runoob.com/sqlite/sqlite-create-table.html 约束表实例 下面是一个实例,它创建了一个 COMPANY 表,ID 作为主 ...