Python实现TCP/IP协议下的端口转发及重定向示例
作者:Cedric Porter 发布时间:2021-10-03 04:30:11
标签:Python,端口
首先,我们用webpy写一个简单的网站,监听8080端口,返回“Hello, EverET.org”的页面。
然后我们使用我们的forwarding.py,在80端口和8080端口中间建立两条通信管道用于双向通信。
此时,我们通过80端口访问我们的服务器。
浏览器得到:
然后,我们在forwarding.py的输出结果中可以看到浏览器和webpy之间的通信内容。
代码:
#!/usr/bin/env python
import sys, socket, time, threading
loglock = threading.Lock()
def log(msg):
loglock.acquire()
try:
print '[%s]: \n%s\n' % (time.ctime(), msg.strip())
sys.stdout.flush()
finally:
loglock.release()
class PipeThread(threading.Thread):
def __init__(self, source, target):
threading.Thread.__init__(self)
self.source = source
self.target = target
def run(self):
while True:
try:
data = self.source.recv(1024)
log(data)
if not data: break
self.target.send(data)
except:
break
log('PipeThread done')
class Forwarding(threading.Thread):
def __init__(self, port, targethost, targetport):
threading.Thread.__init__(self)
self.targethost = targethost
self.targetport = targetport
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind(('0.0.0.0', port))
self.sock.listen(10)
def run(self):
while True:
client_fd, client_addr = self.sock.accept()
target_fd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
target_fd.connect((self.targethost, self.targetport))
log('new connect')
# two direct pipe
PipeThread(target_fd, client_fd).start()
PipeThread(client_fd, target_fd).start()
if __name__ == '__main__':
print 'Starting'
import sys
try:
port = int(sys.argv[1])
targethost = sys.argv[2]
try: targetport = int(sys.argv[3])
except IndexError: targetport = port
except (ValueError, IndexError):
print 'Usage: %s port targethost [targetport]' % sys.argv[0]
sys.exit(1)
#sys.stdout = open('forwaring.log', 'w')
Forwarding(port, targethost, targetport).start()
0
投稿
猜你喜欢
- 本文深入分析了Symfony控制层。分享给大家供大家参考,具体如下:Symfony中控制层包含了连接业务逻辑与表现的代码,控制层为不同的使用
- 首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Un
- 代码如下:Class template Private c_Char, c_Path, c
- 八种获取当前日期的js代码,第一步:把如下代码加入<head>区域中:<SCRIPT language=java
- 本文实例为大家分享了python实现滑雪游戏的具体代码,供大家参考,具体内容如下# coding: utf-8# 滑雪小游戏import s
- 本文实例为大家分享了Python使用Pillow添加水印的具体代码,供大家参考,具体内容如下python数据分析得到的图片,并对照片添加水印
- Array()CInt()CStr() Date() DateAdd() Day() FormatCurrency() FormatDate
- 原来字母还可以组合成各种动物图案,真是佩服设计师的奇思妙想,很可爱,超级有趣的组合!Bembo's Zoo 猴子:羊是牛吗,勤劳的水
- 整理字符串输入整理用户输入的问题在编程过程中极为常见。通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完
- 新下载了一个Pycharm,建了个小demo,期间产生了一个sqlite3文件,由于是第一次打开,就弹出选择打开方式的对话框,手一块直接点了
- 我们在使用bootstraptable做表格展示时,有时需要固定表格的高度当数据超出高度会出现滚动条,这时有可能出现表头列和数据列对不齐。出
- (1)int转strings := strconv.Itoa(i)等价于s := strconv.FormatInt(int64(i), 1
- 第一种: <script language="javascript" type="text/javasc
- 相机固定不动,通过标定版改动不同方位的位姿进行抓拍import cv2camera=cv2.VideoCapture(1)i = 0whil
- 前言:这个先来创建一个模块,名称为christmastree,在该模块中,首先定义一个全局变量,然后创建一个名称为fun_christmas
- GetObject 函数返回对文件中 Automation 对象的引用。GetObject([pathname] [, class])参数P
- 主要有以下步骤:1、人脸检测2、人脸预处理3、从收集的人脸训练机器学习算法4、人脸识别5、收尾工作人脸检测算法:基于Haar的脸部检测器的基
- 首先来解释一下SpringBoot首页设置的三种方式1.SpringBoot默认首页设置编写一个最简单的html文件 index.html&
- 本文实例为大家分享了OpenCV+face++实现实时人脸识别解锁功能的具体代码,供大家参考,具体内容如下1.背景最近做一个小东西,需要登录
- 本文实例讲述了python实现字符串和日期相互转换的方法。分享给大家供大家参考。具体分析如下:这里用的分别是time和datetime函数&