我有一个可以发送的二进制文件netcat:
$ nc -l localhost 8181 < my.dat
Run Code Online (Sandbox Code Playgroud)
该文件包含以下内容:
$ xxd my.dat
0000000: 0006 3030 3030 4e43 ..0000NC
Run Code Online (Sandbox Code Playgroud)
我真正想做的是直接发送十六进制字符串。我试过这个:
$ echo '0006303030304e43' | nc -l localhost 8181
Run Code Online (Sandbox Code Playgroud)
但是,上面的命令只是将 ascii 字符串直接发送到nc.
所以我可以使用这个 netcat 命令来检查 UDP 端口是否打开:
$ nc -vz -u 10.1.0.100 53
Connection to 10.1.0.100 53 port [udp/domain] succeeded!
Run Code Online (Sandbox Code Playgroud)
与 TCP 不同,UDP 是无连接的(即发即忘)。那么在高层次上有没有人知道 netcat 是如何知道 UDP 端口是打开的?它是否要求回复或类似的东西?
使用 netcat 侦听器,例如:
nc -l <port> < ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
我可以在一台新机器(没有nc或 LDAP)上抓取我的 .bashrc :
cat < /dev/tcp/<ip>/<port> > ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法nc -l <port>用 /dev/tcp 而不是模仿我第一行中的功能nc?
我正在使用的机器是极其坚固的实验室/沙盒环境 RHEL(没有 ssh,没有 nc,没有 LDAP,没有 yum,我无法安装新软件,而且它们没有连接到互联网)
我不确定何时使用nc,netcat或ncat。如果一个是另一个的弃用版本?如果一个仅在一个发行版上可用?如果它是相同的命令但名称不同?
其实我有点困惑。我的问题来自想要在两台 CentOS 7 服务器之间进行网络速度测试。我遇到了几个使用nc和 的例子,dd但使用netcat或 的例子并不多ncat。
有人可以为我澄清一下吗?
我正在尝试使用 netcat 从一台虚拟机连接到另一台虚拟机的端口 25,但它告诉我,no route to host尽管我可以 ping。我确实将防火墙默认策略设置为丢弃,但我有一个例外,可以接受该特定子网上端口 25 的流量。我可以使用 nc 在端口 25 上从 VM 3 连接到 VM 2,但不能从 VM 2 连接到 3。
这是我的 VM2 防火墙规则的预览
这是我的 VM 3 防火墙规则的预览
当我显示我拥有的侦听服务时*:25,这意味着它正在侦听所有 ipv4 ip 地址和:::25ipv6 地址。我不明白错误在哪里以及为什么不工作两个防火墙规则都接受端口 25 上的流量,因此它应该连接。我尝试比较两者之间的差异以了解为什么我可以从 vm3 连接到 vm2 但配置都是相同的。关于可能是什么问题的任何建议?
更新停止 iptable 服务解决了问题,但我仍然需要存在这些规则。
我有一个侦听进程IP:port- 实际上它是连接到套接字的火花流。问题是我希望以某种方式创建一个连接到一个端口上的 spark 的服务器,并且数据从另一个端口流入该服务器。
例如,火花流示例使用 netcat 实用程序(例如nc -lk 5005)。但是,我有另一个服务可以侦听传入的消息然后吐出一条消息。所以我需要某种服务器来监听来自服务 A 的消息并将它们传递给 spark。
我的服务 A,依赖于套接字。我的火花消费者依赖于套接字。
这是我到目前为止所做的是从端口到端口的转发,但这似乎不起作用:
nc -X 4 -x 127.0.0.1:5005 localhost 5006
Run Code Online (Sandbox Code Playgroud)
有了服务A:5005->套接字-> 5006->Spark的想法
我似乎找不到正确的方法来完成这项工作。
一些答案提出了以下建议:
socat tcp-l:5005,fork,reuseaddr tcp:127.0.0.1:5006
Run Code Online (Sandbox Code Playgroud)
我的火花插座接收器没有或似乎无法连接。我收到错误:Error connecting to 127.0.0.1:5006 - java.net.ConnectException: Connection refused
我正在使用最新版本的 netcat ( v1.10-41.1),它似乎没有 IPv6 地址的选项(就像-6旧版本的nc)。
如果我输入nc -lvnp 2222并检查监听端口netstat -punta,服务器似乎只监听2222IPv4 地址的端口:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 2839/nc
Run Code Online (Sandbox Code Playgroud)
tcp6 不活跃,例如,我的 apache2 服务器:
tcp6 0 0 :::80 :::* LISTEN -
Run Code Online (Sandbox Code Playgroud) TL;DR 版本
观看此 ASCII 演员表或此视频- 然后找出发生这种情况的任何原因。下面的文字说明提供了更多的上下文。
设置细节
ssh上生成,连接到运行 Armbian 的 SBC(橙色 PI 零)。使用 iperf3 对链接进行基准测试
以 为基准时iperf3,笔记本电脑和 SBC 之间的链接低于理论 56 Mbits/sec - 正如预期的那样,因为这是一个非常“拥挤的 2.4GHz” (公寓楼)内的 WiFi 连接。
更具体地说:在iperf3 -sSBC 上运行后,在笔记本电脑上执行以下命令:
# iperf3 -c 192.168.1.150
Connecting to host 192.168.1.150, port 5201
[ 5] local 192.168.1.89 port …Run Code Online (Sandbox Code Playgroud) 我一直在摆弄让这个工作一段时间,所以我怀疑对管道如何工作的某种根本误解是我遇到麻烦的根本原因。
我的目标是通过netcat并在文件系统上有两个命名管道启动到某个远程主机的 TCP 连接:一个进程可以从中读取以获取传入数据,另一个进程可以写入作为传出数据。我目前正在使用以下结构:
mkfifo in
mkfifo out
cat out | netcat foo.bar.org 4000 > in &
Run Code Online (Sandbox Code Playgroud)
从这里开始,我想允许其他进程从这个打开的 TCP 连接读取和写入。这应该“正常工作”,还是有这样的构造不能工作的原因?
什么似乎目前发生的是,我可以读取out没有问题,但是当我写到in我得到的输出提一个破碎的管道和所有后续通信似乎是死了。想法?
(相关:我最初使用的是:
netcat foo.bar.org 4000 < out > in &
Run Code Online (Sandbox Code Playgroud)
但发现它阻塞等待输入。我对此也很好奇,但最好在单独的问题中解决。)
我想通过我的 SSH(反向)隧道打开从我的笔记本电脑到桌面的远程桌面会话。那应该很简单(或者至少是可行的),对吧?到目前为止,我一直在使用 Team Viewer 登录远程桌面。我想在没有 Team Viewer 的情况下获得类似的结果。
这是我的 SSH 隧道的样子:
laptop--->nat--->middleman<--nat<--desktop
Run Code Online (Sandbox Code Playgroud)
所有机器都运行 Linux(主要是 Kubuntu 12.04 或 OpenSuse 12.3)。我无法在 nat 路由器上更改任何端口或进行任何配置更改。
我将描述我的 SSH 隧道,因为在解决作为我问题核心的 VNC/远程桌面问题时,理解这一点似乎是必要的。关于这条腿:
middleman<--nat<--desktop
Run Code Online (Sandbox Code Playgroud)
...这是它的建立方式:
autossh -M 5234 -N -f -R 1234:localhost:22 user@middleman.com
Run Code Online (Sandbox Code Playgroud)
关于这条腿:
laptop--->nat--->middleman
Run Code Online (Sandbox Code Playgroud)
我可以按如下方式连接到中间人:
me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman
Run Code Online (Sandbox Code Playgroud)
但是,我实际上需要做的是直接连接到桌面,而不是中间人。为此,我在中间人上使用 netcat(“nc”)。基于此,似乎需要 nc 。所以我在笔记本电脑上编辑我的 SSH 配置文件以使用 ProxyCommand 和 nc:
me@laptop:~/.ssh$ nano config
Run Code Online (Sandbox Code Playgroud)
内容是:
Host family_desktops
ProxyCommand ssh middleman_fqdn nc localhost %p
User admin
PasswordAuthentication no
IdentityFile ~/.ssh/my_id_rsa
Run Code Online (Sandbox Code Playgroud)
哪里middleman_fqdn像“middleman.com”
然后我只需一步连接到“桌面”:
me@laptop:~$ ssh family_desktops -p …Run Code Online (Sandbox Code Playgroud)