使用 Python 脚本和 netcat 转发消息
Forwarding messages with Python script and netcat
我正在尝试将终端输出流(在终端 T1 中)转发到本地主机端口,在终端 T2 上收听。然后,使用一个简单的 Python 套接字脚本来捕获流式数据并将其打印出来。我为 Python 套接字脚本引用了 this post for the ubuntu command and this post:
情况一:
在T2航站楼,我先运行这个:监听2003端口
nc -l 2003
在终端 T1 中,我然后 运行 流式命令 (Kafka)。 kafka 服务器在端口 9092 上:
.bin/kafka-console-consumer --topic <topic_name> --from-beginning --bootstrap-server <dns:port> | pv | netcat localhost 2003
在这种情况下,我可以看到流数据显示在T2 上。因此,流已经从Kafka终端发送到另一个端口,被另一个进程监听。
情况二:
这是终端 T3
上的 Python 代码 I 运行
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 2003))
while True:
data = client_socket.recv(512)
if len(data) > 0:
print("RECEIVED: %s" % data)
序列是:我运行T2,T3中的Python代码,然后是T1中的Kafka命令。这一次,我在 T3 或 T2 中都没有看到任何消息。
目的是通过中间转发器使用Python脚本捕获Kafka流式传输的数据。这是正确的方法还是有什么方法可以做到这一点?
您的 Kafka 和 Python 作为客户端工作,nc -l 2003
作为服务器。
存在三个问题
- 此服务器只能从一个客户端接收值。
- Python 等待来自服务器的数据,但此服务器未发送任何数据。
- 此服务器没有从一个客户端发送到另一个客户端的功能。
您应该使用 Python 创建服务器并使用它而不是 nc
这是一个简单的服务器,您可以使用它来代替 nc -l 2003
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 2003))
server.listen(1)
print('WAITING FOR CLIENT')
s, addr = server.accept()
print('CONNECTED:', addr)
try:
while True:
data = s.recv(512)
if not data:
break
print("RECEIVED:", data.decode())
except KeyboardInterrupt:
print('STOPPED by CTRL+C')
finally:
s.close()
server.close()
我正在尝试将终端输出流(在终端 T1 中)转发到本地主机端口,在终端 T2 上收听。然后,使用一个简单的 Python 套接字脚本来捕获流式数据并将其打印出来。我为 Python 套接字脚本引用了 this post for the ubuntu command and this post:
情况一: 在T2航站楼,我先运行这个:监听2003端口
nc -l 2003
在终端 T1 中,我然后 运行 流式命令 (Kafka)。 kafka 服务器在端口 9092 上:
.bin/kafka-console-consumer --topic <topic_name> --from-beginning --bootstrap-server <dns:port> | pv | netcat localhost 2003
在这种情况下,我可以看到流数据显示在T2 上。因此,流已经从Kafka终端发送到另一个端口,被另一个进程监听。
情况二: 这是终端 T3
上的 Python 代码 I 运行import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 2003))
while True:
data = client_socket.recv(512)
if len(data) > 0:
print("RECEIVED: %s" % data)
序列是:我运行T2,T3中的Python代码,然后是T1中的Kafka命令。这一次,我在 T3 或 T2 中都没有看到任何消息。
目的是通过中间转发器使用Python脚本捕获Kafka流式传输的数据。这是正确的方法还是有什么方法可以做到这一点?
您的 Kafka 和 Python 作为客户端工作,nc -l 2003
作为服务器。
存在三个问题
- 此服务器只能从一个客户端接收值。
- Python 等待来自服务器的数据,但此服务器未发送任何数据。
- 此服务器没有从一个客户端发送到另一个客户端的功能。
您应该使用 Python 创建服务器并使用它而不是 nc
这是一个简单的服务器,您可以使用它来代替 nc -l 2003
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 2003))
server.listen(1)
print('WAITING FOR CLIENT')
s, addr = server.accept()
print('CONNECTED:', addr)
try:
while True:
data = s.recv(512)
if not data:
break
print("RECEIVED:", data.decode())
except KeyboardInterrupt:
print('STOPPED by CTRL+C')
finally:
s.close()
server.close()