Linux Netcat监听器

3
我正在尝试理解为什么我的Kali Linux虚拟机中的netcat监听器不起作用。据我所知,我需要打开终端并打开端口。

nc -l 155

然后,在我的虚拟机中打开另一个终端,并使用以下命令连接到该端口号。

nc 127.0.0.1 155(环回IP地址和相同的端口号)

但是,它不成功了,由于我只是这个领域的新手,所以希望得到一些关于此问题的帮助。然而,我找到了一种执行此命令的新方法,但我不明白为什么这种新方法有效,而我在课堂上学习的原始方法无法生效。非常感谢您的帮助!

Netcat Listener


1
你所包含的图像不是表明你已经成功打开了一个“远程”shell吗?问题出在哪里? - jDo
是的,但我在课堂上学到必须在一个终端中使用nc -l 155的原始方法,在另一个终端中使用nc 127.0.0.1 -p 155,而不是使用/bin/bash。 - Dojo
2个回答

3
首先,要使自己摆脱新手状态,您必须理解错误的含义。“it was unsuccessful” 对于任何真正的调试来说都是不充分的描述。可能发生的情况是问题的有价值的线索 - 您应该包含这些信息。此外,您确实需要完全正确地在问题中输入命令。不要说您做了一件事,然后发布一个截图显示其他事情正在发生。我不确定 -e 应该做什么,但我在我的 osx 实现或在线手册页面中没有找到任何记录。
不同版本或实现的 netcat 可能会有所不同,但从我在我的 osx 盒子上看到的 netcat 中看到的内容来看,-p 不是指定目标端口的正确方式。
$ nc localhost -p 1055
nc: missing hostname and port
usage: nc [-46AacCDdEFhklMnOortUuvz] [-K tc] [-b boundif] [-i interval] [-p source_port] [--apple-delegate-pid pid] [--apple-delegate-uuid uuid]
      [-s source_ip_address] [-w timeout] [-X proxy_version]
      [-x proxy_address[:port]] [hostname] [port[s]]

-p指定端口。通常情况下,您不需要指定它。此外,在同一端口上的同一台计算机上的套接字的源和目标不能相同。通常情况下,无需指定源端口。

最后,1024以下的端口只能由root分配。像大多数Linux专业人员一样,除非我确实需要,否则我不会以root身份运行任何东西,因此我将其更改为1055以进行演示。每个终端窗口中都有一个nc,在其中一个中键入消息,另一侧会打印出来。观察:

$ nc -l 1055
hi world
hi yourself, world!

$ nc localhost 1055
hi world
hi yourself, world!

Kali Linux 中的默认用户是 root,因此这不是权限问题(请参见问题中包含的图像)。-e 选项是某些 netcat 实现中 exec 的简写。 - jDo
嗨,我仍然在使用1024以上的端口后遇到连接被拒绝的问题。 - Dojo
此外,netcat监听器就像主从关系。这是否意味着nc -l 1055(打开端口)是从属,而nc 127.0.0.1(连接到该端口)是主控?那么,这里的监听器是谁? - Dojo
@Justin 一方面监听(这就是 -l 的作用),另一方面连接。如果成功,您就建立了一个双向 TCP 连接(假设您没有使用 UDP),主从关系实际上不存在了。Netcat 有许多版本,您的问题很可能是由 -p 标志引起的(通过测试 Dan Farrell 的示例来确认;如果它可以工作,您和您的老师可能正在使用不同版本的 Netcat)。 - jDo
主/从是一个令人困惑的术语。最好将其视为“服务器”(监听器)和“客户端”(发起与监听服务器的连接)。 - erik258
需要澄清的是 - 并不是说你不能使用root,只是在非特权区域中开放150端口而非1050端口是没有必要的。你并没有发布所有的排列组合,所以无法确定你正在做什么,但很可能kali正在运行某种会拒绝你的流量的防火墙(导致连接被拒绝)。猜测为什么你没有发布的所有调用都不起作用将是一项愚蠢的任务。 - erik258

1

服务器:nc -l ${port} > ${file}

本地:nc ${ip} -z ${port} < ${file}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接