我有一个进程监听IP:port
- 事实上它是连接到套接字的火花流。问题是我希望以某种方式创建一台连接到一个端口上的 Spark 的服务器,并且数据从另一个端口流式传输到该服务器。
例如,spark 流示例使用 netcat 实用程序(例如nc -lk 5005
)。但是,我有另一个服务可以侦听传入的消息,然后发出消息。所以我需要某种服务器可以监听来自服务A的消息并将它们传递给spark。
我的服务 A 依赖于套接字。我的 Spark 消费者依赖于套接字。
这是我到目前为止所做的从端口到端口的转发,但这似乎不起作用:
nc -X 4 -x 127.0.0.1:5005 localhost 5006
想法是service A:5005
-> socket -> 5006
-> Spark
我似乎找不到正确的方法来完成这项工作。
一些答案提出了以下建议:
socat tcp-l:5005,fork,reuseaddr tcp:127.0.0.1:5006
我的火花插座接收器没有或似乎无法连接。我收到错误:Error connecting to 127.0.0.1:5006 - java.net.ConnectException: Connection refused
答案1
您不能仅nc
用于转发流量、nc
没有keep-alive
或fork
模式
你必须使用其他工具来代替nc
;例如使用socat
或ncat
此命令侦听端口5050
并将所有内容转发到端口2020
socat tcp-l:5050,fork,reuseaddr tcp:127.0.0.1:2020
ncat
阅读更多
Ncat 是一个功能丰富的网络实用程序,可以从命令行跨网络读取和写入数据。 Ncat 是为 Nmap 项目编写的,是对古老的 Netcat 的大幅改进的重新实现。它
ncat -l localhost 8080 --sh-exec "ncat example.org 80"
您还可以使用其他工具:
侦听端口 1234 并将其转发到地址“1.1.1.1”上的端口 4567
./proxy tcp -p ":1234" -T tcp -P "1.1.1.1:4567"
侦听端口 1234 并将其转发到地址“1.1.1.1”上的端口 4567来源
./gost -L tcp://:1234/1.1.1.1:4567
答案2
我有一个类似的用例。我的目的是监听外部端口并将其转发到指向反向 ssh 隧道的内部端口。
外部端口:8001
内部端口:18820
nc -l -k -p 8001 -c "nc 127.0.0.1 18820"
参考:
答案3
对于仅通过 net cat 进行端口转发,您可以使用管道:
mkfifo pip
nc -l -p port_to_listen < pip | nc target_ip port_to_be_forwarded > pip
或者:
nc target_ip port_to_be_forwarded < pip | nc -l -p port_to_listen > pip