`
cakin24
  • 浏览: 1397375 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

python实现代理服务器端口映射功能

阅读更多

一 代码

1、模拟服务端代码
import sys
import socket
import threading
#回复消息,原样返回
def replyMessage(conn):
    while True:
        data = conn.recv(1024)
        conn.send(data)
        if data.decode().lower() == 'bye':
            break
    conn.close()
def main():
    sockScr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sockScr.bind(('', port))
    sockScr.listen(200)
    while True:
        try:
            conn, addr = sockScr.accept()
            #只允许特定主机访问本服务器
            if addr[0] != onlyYou:
                conn.close()
                continue
            #创建并启动线程
            t = threading.Thread(target=replyMessage, args=(conn,))
            t.start()        
        except:
            print('error')
if __name__ == '__main__':
    try:
        #获取命令行参数
        port = int(sys.argv[1])
        onlyYou = sys.argv[2]
        main()
    except:
        print('Must give me a number as port')
        
 
2、模拟代理服务器代码
import sys
import socket
import threading
def middle(conn, addr):
    #面向服务器的Socket
    sockDst = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sockDst.connect((ipServer,portServer))
    while True:
        data = conn.recv(1024).decode()
        print('收到客户端消息:'+data)
        if data == '不要发给服务器':
            conn.send('该消息已被代理服务器过滤'.encode())
            print('该消息已过滤')
        elif data.lower() == 'bye':
            print(str(addr)+'客户端关闭连接')
            break
        else:
            sockDst.send(data.encode())
            print('已转发服务器')
            data_fromServer = sockDst.recv(1024).decode()
            print('收到服务器回复的消息:'+data_fromServer)
            if data_fromServer == '不要发给客户端':
                conn.send('该消息已被代理服务器修改'.encode())
                print('消息已被篡改')
            else:
                conn.send(b'Server reply:'+data_fromServer.encode())
                print('已转发服务器消息给客户端')
        
    conn.close()
    sockDst.close()
def main():
    sockScr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sockScr.bind(('', portScr))
    sockScr.listen(200)
    print('代理已启动')
    while True:
        try:
            conn, addr = sockScr.accept()
            t = threading.Thread(target=middle, args=(conn, addr))
            t.start()
            print('新客户:'+str(addr))
        except:
            pass
        
if __name__ == '__main__':
    try:
        #(本机IP地址,portScr)<==>(ipServer,portServer)
        #代理服务器监听端口
        portScr = int(sys.argv[1])
        #服务器IP地址与端口号
        ipServer = sys.argv[2]
        portServer = int(sys.argv[3])
        main()
    except:
        print('Sth error')
 
3、模拟客户端代码
import sys
import socket
def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((ip, port))
    while True:
        data = input('What do you want to ask:')
        sock.send(data.encode())
        print(sock.recv(1024).decode())
        if data.lower() == 'bye':
            break
    sock.close()
if __name__ == '__main__':
    try:
        #代理服务器的IP地址和端口号
        ip = sys.argv[1]
        port = int(sys.argv[2])
        main()
    except:
        print('Sth error')
 
二 运行结果

 
三 运行说明
从结果可以看出,代理服务器代码能够对客户端和服务器之间的内容进行记录,也能够修改双方通信内容,这样实际存在潜在危险。只要代理服务想这样做,客户在网络上的通信就没有什么隐私可言了,因此如果涉及金钱交易,最好不要使用代理服务器。
  • 大小: 30.7 KB
分享到:
评论

相关推荐

    Python简单实现的代理服务器端口映射功能示例

    本文实例讲述了Python简单实现的代理服务器端口映射功能。分享给大家供大家参考,具体如下: 一 代码 1、模拟服务端代码 import sys import socket import threading #回复消息,原样返回 def replyMessage(conn): ...

    Linux 或 Windows 上实现端口映射.docx

    Linux 或 Windows 上实现端口映射 端口映射是指将一个或多个网络端口从一个网络地址映射到另一个网络地址的过程。...通过配置端口映射,服务器可以承担起转发数据包的功能,从而实现不同网络之间的通信。

    Python语言实现http服务器

    Python服务器可以通过读取文件系统中的文件并将其内容作为响应发送给客户端来实现这一点。 7. **异常处理**: 实现过程中应考虑错误和异常情况,如文件未找到、权限问题或无效的HTTP请求。适当的异常处理能确保...

    Python实现TCP协议下的端口映射功能的脚本程序示例

    Python作为一门强大的编程语言,可以用来编写实现TCP协议下的端口映射功能的脚本。 1. 端口映射作用 端口映射的主要作用是解决网络隔离问题。例如,当A和B两台机器可以直接通信,B和C也可以,但A和C之间无法直接...

    modbus通信的Python实现

    在Python中,我们可以使用各种库来实现Modbus通信,其中一个常见的库是`pyModbusTCP`,这也是压缩包文件`pyModbusTCP-master`所包含的内容。 在深入探讨Python实现Modbus TCP通信之前,我们先理解一下Modbus的基本...

    usbmuxd-1.0.8.tar.gz python 端口转发

    在USBMuxd场景下,Python可以被用来编写脚本,自动化处理端口映射和设备连接的过程。通过Python的socket库,开发者可以创建一个本地服务器,将特定端口的流量转发到USBMuxd所映射的远程端口,从而实现本地与iOS设备...

    基于python的DNS中继服务器源码

    还要指定上游DNS服务器的IP地址和端口号以及本地监听的IP地址和端口号。 总之,这个代码实现了一个基本的DNS服务器,它可以对一些特定的DNS查询请求作出自定义的响应。但请注意,在使用这个代码之前,你需要确保...

    Python-通过Django在web上实现xshell的功能

    【Python-通过Django在web上实现xshell的功能】 Django是Python中广泛使用的Web开发框架,它提供了高效、简洁且实用的工具,用于构建高质量的Web应用。本项目的目标是利用Django来构建一个类似xshell的Web应用,...

    使用Python搭建简单的服务器,实现页面分发与数据接口功能

    本教程将带你了解如何使用Python搭建一个简单的服务器,实现页面分发和数据接口功能。这个过程涉及到的知识点包括Python的基础语法、Web服务器框架、HTTP协议以及数据交互。 首先,Python提供了内置的HTTP服务器...

    网页烟花的源代码,还有相应的c#本地端口映射

    网页烟花的源代码和C#本地端口映射是计算机编程中的两个有趣主题,它们涉及到动态效果的生成和网络通信的实现。在这个场景中,"烟花代码"指的是使用编程语言(如Python)来创建一种模拟烟花绽放效果的程序,而"网页...

    如何将服务器上的python代码通过QQ发送回传信息(附实现方法)

    本文介绍了如何通过服务器端的Python代码实现与QQ的交互,并把结果信息通过QQ发送回传给用户。文章首先阐述了背景,即在家中运行数据量大的代码时,会占用大量的CPU资源和时间,导致无法使用电脑,因此作者希望...

    Python的Asyncore异步Socket模块及实现端口转发的例子

    只有两种方式使一个程序在单处理器上实现“同时做不止一件事”。多线程编程是最简单和最流行的方式,但是有另一种很不一样的技术,可以使得我们保持多线程的几乎所有优势,却不用真正使用多线程。 如果你的程序主要...

    Python-pyDDNS是一个简单的PythonDDNS服务器就像花生壳服务器

    此外,Python-pyDDNS还实现了socket转发功能,使得远程用户可以通过固定的域名连接到本地服务器的特定端口。这通常涉及到端口映射和NAT穿透技术,例如使用UDP hole punching或TCP连接复用策略。在Python中,`socket`...

    Python 通过监听端口实现唯一脚本运行方式

    本文将介绍如何通过监听端口的方式实现这一功能,并结合Tornado Web服务器来演示一个简单的监听服务器端口并返回响应的程序。 首先,我们来看如何使用Python的socket模块来监听端口,以判断脚本是否已经在运行。...

    Python如何实现FTP功能

    在Python编程中,FTP(File Transfer Protocol)功能的实现主要依赖于`...这个简单的FTP服务器示例展示了如何使用Python进行基本的FTP服务实现,但要创建一个功能完备的FTP服务器,还需要更多的代码和精细的设计。

    python-myserver

    在"python-myserver"的压缩包中,"MyServer"可能是实现了上述概念的源代码文件或者一个包含所有服务器相关文件的目录。如果要深入理解这个项目,你需要查看源代码,了解其具体实现,包括如何处理请求、响应数据的...

    Python-SanicDB是为Python的异步Web框架Sanic方便操作MySQL而开发的工具

    6. **ORM兼容性**:虽然SanicDB本身可能不完全是一个ORM框架,但它可以与现有的Python ORM库如SQLAlchemy或Peewee结合使用,以实现更高级别的数据模型抽象。 在使用SanicDB时,开发者通常会按照以下步骤进行操作: ...

    python利用隧道转发技术实现远程监控,不仅限用于局域网,把forwardServer.py中转服务器放到具有公网ip的服务器

    如果使用`paramiko`,可能需要设置SSH隧道,指定本地端口和远程服务器的端口映射。 2. **配置SSH连接**:确保中转服务器与局域网内的camera服务器之间可以建立SSH连接。这可能需要在camera服务器上设置SSH服务,并...

    很实用的端口接收数据并存储到数据库中的程序

    在Java或Python等语言中,可以创建ServerSocket来监听特定端口,当有连接请求时,ServerSocket会生成一个Socket对象用于实际的数据传输。例如,在Java中,我们可以使用`ServerSocket server = new ServerSocket...

    c#远程调用linux服务器的Python脚本(csdn)————程序.pdf

    1. 创建一个共享文件夹,开启端口映射,运行Docker容器。 2. 将脚本放入共享文件夹,然后通过`docker attach`进入容器并将脚本移动到适当位置。 3. 在容器内使用`nohup`启动脚本。如果服务不可访问,确保在容器内...

Global site tag (gtag.js) - Google Analytics