
Python简单实现的代理服务器端口映射功能示例
这篇文章主要介绍了Python简单实现的代理服务器端口映射功能,结合实例形式分析了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')
二 运行结果
三 运行说明
从结果可以看出,代理服务器代码能够对客户端和服务器之间的内容进行记录,也能够修改双方通信内容,这样实际存在潜在危险。只要代理服务想这样做,客户在网络上的通信就没有什么隐私可言了,因此如果涉及金钱交易,最好不要使用代理服务器。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA 干货分享:统计学的应用 在数据驱动业务发展的时代浪潮中,统计学作为数据分析的核心基石,发挥着无可替代的关键作用。 ...
2025-06-18CDA 精益业务数据分析:解锁企业增长新密码 在数字化浪潮席卷全球的当下,数据已然成为企业最具价值的资产之一。如何精准地 ...
2025-06-18CDA 培训:开启数据分析师职业大门的钥匙 在大数据时代,数据分析师已成为各行业竞相争夺的关键人才。CDA(Certified Data ...
2025-06-18CDA 人才招聘市场分析:机遇与挑战并存 在数字化浪潮席卷各行业的当下,数据分析能力成为企业发展的核心竞争力之一,持有 C ...
2025-06-17CDA金融大数据案例分析:驱动行业变革的实践与启示 在金融行业加速数字化转型的当下,大数据技术已成为金融机构提升 ...
2025-06-17CDA干货:SPSS交叉列联表分析规范与应用指南 一、交叉列联表的基本概念 交叉列联表(Cross-tabulation)是一种用于展示两个或多 ...
2025-06-17TMT行业内审内控咨询顾问 1-2万 上班地址:朝阳门北大街8号富华大厦A座9层 岗位描述 1、为客户提供高质量的 ...
2025-06-16一文读懂 CDA 数据分析师证书考试全攻略 在数据行业蓬勃发展的今天,CDA 数据分析师证书成为众多从业者和求职者提升竞争力的重要 ...
2025-06-16数据分析师:数字时代的商业解码者 在数字经济蓬勃发展的今天,数据已成为企业乃至整个社会最宝贵的资产之一。无论是 ...
2025-06-16解锁数据分析师证书:开启数字化职业新篇 在数字化浪潮汹涌的当下,数据已成为驱动企业前行的关键要素。从市场趋势研判、用 ...
2025-06-16CDA 数据分析师证书含金量几何?一文为你讲清楚 在当今数字化时代,数据成为了企业决策和发展的重要依据。数据分析师这一职业 ...
2025-06-13CDA 数据分析师:数字化时代的关键人才 在当今数字化浪潮席卷全球的时代,数据已然成为驱动企业发展、推动行业变革的核心要素。 ...
2025-06-13CDA 数据分析师报考条件全解析 在大数据和人工智能时代,数据分析师成为了众多行业追捧的热门职业。CDA(Certified Data Analyst ...
2025-06-13“纲举目张,执本末从。”若想在数据分析领域有所收获,一套合适的学习教材至关重要。一套优质且契合需求的学习教材无疑是那关键 ...
2025-06-092025 年,数据如同数字时代的 DNA,编码着人类社会的未来图景,驱动着商业时代的运转。从全球互联网用户每天产生的2.5亿TB数据, ...
2025-05-27CDA数据分析师证书考试体系(更新于2025年05月22日)
2025-05-26解码数据基因:从数字敏感度到逻辑思维 每当看到超市货架上商品的排列变化,你是否会联想到背后的销售数据波动?三年前在零售行 ...
2025-05-23在本文中,我们将探讨 AI 为何能够加速数据分析、如何在每个步骤中实现数据分析自动化以及使用哪些工具。 数据分析中的AI是什么 ...
2025-05-20当数据遇见人生:我的第一个分析项目 记得三年前接手第一个数据分析项目时,我面对Excel里密密麻麻的销售数据手足无措。那些跳动 ...
2025-05-20在数字化运营的时代,企业每天都在产生海量数据:用户点击行为、商品销售记录、广告投放反馈…… 这些数据就像散落的拼图,而相 ...
2025-05-19