- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是我在这里的第一篇文章!
我的目标是复制单向 TCP 流的有效负载并将此有效负载同时发送到多个端点。我有一个用 Python 编写的工作原型(prototype),但是我是 Python 和 Socket 编程的新手。理想情况下,该解决方案能够在 Windows 和 *nix 环境中运行。
此原型(prototype)有效,但它会为每个缓冲区长度(当前设置为 4096 字节)创建一个新的发送 TCP 连接。这样做的主要问题是我最终会用完本地端口来发送,理想情况下我希望数据从每个传入的 TCP 流传递到一个 TCP 流出(对于每个端点)。传入的数据可以从不到 1024 字节到数百兆字节不等。
目前每 4096 字节启动一个新的传出 TCP 流。我不确定问题是否出在我的线程实现中,或者我是否遗漏了其他非常明显的问题。
在我的研究中,我发现 select() 可以提供帮助,但我不确定它是否合适,因为我可能需要处理一些传入数据并在将来的某些情况下响应发送客户端。
这是我到目前为止的代码(我尝试过的一些代码变体被注释掉了):
#!/usr/bin/python
#One way TCP payload duplication
import sys
import threading
from socket import *
bufsize = 4096
host= ''
# Methods:
#handles sending the data to the endpoints
def send(endpoint,port,data):
sendSocket = socket(AF_INET, SOCK_STREAM)
#sendSocket.setblocking(1)
sendSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
#sendport = sendSocket.getsockname
#print sendport
try:
sendSocket.connect((endpoint, port))
sendSocket.sendall(data)
except IOError as msg:
print "Send Failed. Error Code: " + str(msg[0]) + ' Message: ' + msg[1]
sys.exit()
#handles threading for sending data to endpoints
def forward(service, ENDPOINT_LIST, port, data):
#for each endpoint in the endpoint list start a new send thread
for endpoint in ENDPOINT_LIST:
print "Forwarding data for %s from %s:%s to %s:%s" % (service,host,port,endpoint,port)
#send(endpoint,port,data)
ethread = threading.Thread(target=send, args=(endpoint,port,data))
ethread.start()
#handles threading for incoming clients
def clientthread(conn,service,ENDPOINT_LIST,port):
while True:
#receive data form client
data = conn.recv(bufsize)
if not data:
break
cthread = threading.Thread(target=forward, args=(service, ENDPOINT_LIST, port, data))
cthread.start()
#no data? then close the connection
conn.close()
#handles listening to sockets for incoming connections
def listen(service, ENDPOINT_LIST, port):
#create the socket
listenSocket = socket(AF_INET, SOCK_STREAM)
#Allow reusing addresses - I think this is important to stop local ports getting eaten up by never-ending tcp streams that don't close
listenSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
#try to bind the socket to host and port
try:
listenSocket.bind((host, port))
#display an error message if you can't
except IOError as msg:
print "Bind Failed. Error Code: " + str(msg[0]) + ' Message: ' + msg[1]
sys.exit()
#start listening on the socket
listenSocket.listen(10)
print "Service %s on port %s is listening" %(service,port)
while True:
#wait to accept a connection
conn, addr = listenSocket.accept()
print 'Connected to ' + addr[0] + ':' + str(addr[1]) + ' on port ' + str(port)
#start new thread for each connection
lthread = threading.Thread(target=clientthread , args=(conn,service,ENDPOINT_LIST,port))
lthread.start()
#If no data close the connection
listenSocket.close()
service = "Dumb-one-way-tcp-service-name1"
ENDPOINT_LIST = ["192.168.1.100","192.168.1.200"]
port = 55551
listen(service,ENDPOINT_LIST,port)
我研究了其他库以尝试实现我的目标,包括使用:
但是,对于我的适度需求和编程技能水平而言,我发现它们相当复杂。
如果有人对我如何改进我的方法或实现此目标的任何其他方式有任何建议,请告诉我!
最佳答案
简而言之,您的问题是端口不够,对吗?看来你发送后没有关闭套接字。在 send()
中试试这个:
...
except IOError as msg:
print "Send Failed. Error Code: " + str(msg[0]) + ' Message: ' + msg[1]
sys.exit()
finally:
sendSocket.close()
关于Python TCP Payload Duplication - 同时将数据传递到多个端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26292909/
概述 我想实现一个 Lucene 索引器/搜索器,它使用新的有效负载功能,允许向文本添加元信息。在我的具体情况下,我向概念标签添加权重(可以理解为 % 概率,介于 0 到 100 之间),以便使用它们
我正在分析一个 metasploit 漏洞 here我试图弄清楚 payload.encoded 中的 payload 来自第 358 行。我是开发开发的新手,但基本的编程规则说 payload 应该
我从我的 javascript 发送交易 Metamask 打开传输对话框 我确定 i get an error message in metamask (inpage.js:1 MetaMask -
action.payload 何时、何地以及为什么被调用?请任何人帮助我了解action.payload的实际用途是什么。我已经搜索了很多网站,但我不明白.. 最佳答案 当您处理请求时,例如单击我们需
我用 Angular 编写代码,在一种情况下,json 返回一个值(如有效负载),我需要对其进行解密。我有一个这样的有效载荷: 我需要解码它。像下面的方式:例如,$B 部分的值我只需要 14,$s 的
我正在编写一个进行服务调用的 Chrome 扩展。 当我发出同源 POST ajax 请求时,我的数据对象以 JSON 格式传递: $.ajax(sameOriginURL, { data
如何在连接语句的 lambda 中访问信号的“有效负载”? 假设信号看起来像这样: signals: void stateChanged(std::pair); 现在在 connect 语句中,我
我正在尝试使用 RestSharp 来使用查询 rest,但我总是收到 Bad Request 响应。代码: var url = "https://gql.tokopedia.com/graphql/
在 Android GCM 文档中,据说有效载荷最大为 4096 字节限制。 payload的4096字节是否包括registration_id长度?我发现我可以发送有效载荷为 16038 字节(包括
前言 做过前后端联调的小伙伴,可能有时会遇到一些问题。例如,我明明传递数据给后端了,后端为什么说没收到呢?这时候可能就会就会有小伙伴陷入迷茫,本文从chrome-dev-tools(F12调试器)中看
我将 JSON 提供给某个网络钩子(Hook)以触发通知 (M$ Teams)。这很好用。但是,我想扩展我的 Perl 脚本:我需要在特定条件下向我的“messagecard”构造添加一个新节点。 例
我有一个 Xamarin 项目(UWP 和 iOS)在 VS2015 中构建并运行良好。 该项目包含一些通用 Windows 和 iOS 项目,以及两个平台使用的许多 PCL(用于 View 模型、服
我正在使用 Hyperledger Fabric Java SDK 通过 txId 获取交易。返回对象包含交易信息。 TransactionInfo txInfo = channel.queryTra
我有以下代码,用于检查 token 并授权 Google 用户登录 GoogleIdToken.Payload tempPayload = token.getPayload(); if (!tempP
当我们使用 sqlmap ,它会自动执行查找网站的 sql 注入(inject) 的所有操作。我感兴趣的是我直接在我的浏览器中发送恶意查询并在其中获取结果,但是当我找不到任何东西时,我使用 sqlma
我正在使用 Redux 和 React 从 API 加载数据。尽管成功提取数据并将其应用到状态,但它会抛出错误: Uncaught TypeError: Cannot read property 'p
我对 python 的随机函数有一个问题。我不知道哪个随机函数适用于此代码: name=['toffla','rebecca','toff','becca'] if (parser.getPayloa
在阅读了 Heartbeat 的 RFC 6520 后,我有几个问题: https://www.rfc-editor.org/rfc/rfc6520 具体来说,我不明白为什么心跳需要包含任意有效负载甚
如何用php curl发送请求负载? 我正在尝试将一个文件上传到一个免费托管文件的服务器,当将文件发送到curl时,我不接受它,我重定向到一个错误页,当我从您的interfas中执行此操作时,我可以在
我有一个非 ARC 项目,现在我在成功迁移后使用 SDK 8.1 迁移了应用程序 Xcode 6,当我尝试将其存档时,*.ipa 文件已创建,但如果我尝试通过上传应用程序diawi 或 hokey 应
我是一名优秀的程序员,十分优秀!