谁帮我看看故障出在哪里。

litaoa 2017-10-25 03:38:39
#!/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,targethost1, targetport1):
threading.Thread.__init__(self)
self.targethost = targethost
self.targetport = targetport
self.targethost1 = targethost1
self.targetport1= targetport1
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind(('0.0.0.0', port))
self.sock.listen(1000)

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))
target_fd1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
target_fd1.connect((self.targethost1, self.targetport1))

log('new connect')
# two direct pipe
PipeThread(target_fd, client_fd).start()
PipeThread(target_fd1, client_fd).start()
PipeThread(client_fd, target_fd).start()


if __name__ == '__main__':
print 'Starting'
import sys
try:
port = 90
targethost1 = '10.167.0.3'
targetport1 = 12000
targethost = '119.185.1.182'
targetport = 6977
print port, targethost, targetport,targethost1,targetport1
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,targethost1,targetport1).start()





原先网上找的源码。做端口转发的。
测试正常。现在想要改一下。

改成 端口收到内容后发往两台服务器(原先代码是一台),并且把服务器返回的内容再传给客户端。
按上面改了之后,只能发给第一个服务器,不能发给第二个。是不是要加个变量存储中转一下。

请会的同学看一下,帮忙改改。
...全文
322 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
litaoa 2018-01-04
  • 打赏
  • 举报
回复
没有人回答呀。
陈年椰子 2018-01-04
  • 打赏
  • 举报
回复
      log('new connect')
      # two direct pipe
      PipeThread(target_fd, client_fd).start()
      PipeThread(target_fd1, client_fd).start()
      PipeThread(client_fd, target_fd).start()
改成
      log('new connect')
      # two direct pipe
      PipeThread(target_fd, client_fd).start()
      PipeThread(target_fd1, client_fd).start()
      PipeThread(client_fd, target_fd).start()
      PipeThread(client_fd, target_fd1).start()

这样才对称吧?
课程以技术人的网络知识为中心和基线,通过基础理论篇、进阶拓展篇和实践练习篇三个部分的分解与层层递进,全面覆盖OSI七层模型与封装和解封装等网络通信核心思想、TCP协议、TCP三次握手与四次挥手过程原理、time-wait状态及连接过多处理等经典网络硬核基础知识,互联网、云计算与云原生时代下CDN、容器集群网络通信原理等进阶延伸知识,和以读懂/绘制拓扑图、网络诊断与调试命令、生产环境典型的网络故障处理、基于Wireshark和tcpdump进行常见环境尤其是容器环境(包括Docker和Kubernetes容器集群)下报文抓取及分析和分步法来分析并排除故障为代表的实践性知识。 课程大纲如下:课程的设计摒弃过于细分的网工专属的CCNA/CCNP等受众面小的路线,以互联网业界典型的技术岗对网络知识的共性需求为主线,理论联系实际,实践演示反哺验证理论,以突实用性和可实践性为特色,让以往抽象、空洞的网络知识以接地气、看得见、能实际感知观测的方式来传授讲解,有图有真相,有作业有练习,有引导思考和相应解答,有模型有实践演示,还有众多生活中鲜活的举例。确保稍微具备一点基础背景的同学,都能听得懂、学得会、用得上,切实提升大多数技术岗(开发人员、测试人员、运维人员、架构师、解决方案架构师、售前顾问、技术支持工程师、技术客服人员等)的职场竞争力和个人影响力。 除了讲授知识模块本身,还有底层思想的剖析讲解和思维层面的发散引导,以助同学们构筑基础知识框架体系和技术性思维。课程同时融入微服务、CDN、TCP协议及通信原理、云原生与容器集群等互联网界刚需前沿性知识模块,并穿插进部分互联网界技术岗高频基础面试题及解答,以及典型的生产环境网络故障处理举例和少有地方讲解清楚的部分技术疑点和误区(如容器网络flannel的host-gw模式下节点是否必须在同一个二层网络,容器网络Calico中blackhole路由的作用,Calico中IP分配机制是否存在不足等),以最大程度上覆盖满足主要技术岗位对网络及其相关延伸知识的技能需求,确保同学们的学习能紧跟工作实际和主流技术趋势,学有所成、学有所值,并实实在在增加职场筹码。 学习本课程,可有效支撑同学们在物理机、虚拟机、云计算、容器集群、Server-less等不同基础设施环境下,以及单体架构、分布式架构、SOA架构、微服务架构、云原生架构等不同应用架构下,对底层网络基础及相关知识的实际需求运用。

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧