如何通过netcat从互联网下载URL?

kev*_*kev 3 netcat

我可以用来netcat在两台计算机之间传输文件。

# Server
nc -l -p 8080 < file

# client
nc 192.168.1.101 8080 > file
Run Code Online (Sandbox Code Playgroud)

我可以使用netcat从 Internet 下载 URL 之类的wget吗?

all*_*tic 7

假设您指的是常规 HTTP URL,这是可能的,但它需要您手动输入 HTTP 请求。如果 URL 需要带有 url 编码形式的 HTTP POST 或查找特定标头,则这可能非常麻烦。

您需要向 netcat 的标准输入提供有效的 HTTP 请求。总体思路是:

执行命令 nc example.com 80

netcat 将从 开始读取stdin,并且您在终端中输入或粘贴的任何内容都将通过网络发送到您选择的端口上的远程服务器(80 是默认的 HTTP 端口)。

现在您需要输入或粘贴一个 HTTP 请求,例如:

GET / HTTP/1.1
Host: example.com
User-Agent: netcat
Run Code Online (Sandbox Code Playgroud)

最后还需要一些换行符,所以反复按回车键,直到得到 HTTP 响应。然后你必须手动解析响应。

netcat 工作在 TCP 层,因此任何基于 HTTP 的协议在技术上都可以与 netcat 一起使用,但对于不适合人工输入的协议(例如 ssh 和 https),如果您不使用它可能很难使用从程序编写脚本。如果您正在编写程序,为什么不使用普通的 TCP 套接字?

为此目的,netcat 的局限性如下:

  • netcat 不理解 HTTP、FTP、HTTPS、SSH 或任何其他应用层协议。无论您使用何种脚本、程序或手动键控,该输入都必须对应用层有线协议有足够的了解,以便与服务器正确连接。
  • 即使像 HTTP 这样的简单协议也可能有复杂性,需要详细了解协议——分块编码、url 编码形式、根据提供的 cookie 的不同行为、用户代理等,以及需要成功 SSL 握手的 HTTPS。我不知道有谁可以仅使用他们的大脑手动键入 SSL 握手:)
  • 由于 netcat 是愚蠢的,因此如果您正在编写程序,它与仅使用程序化 TCP 套接字相比没有任何优势。如果您只是在终端上打字,那么使用支持适当应用层协议(例如 wget、curl、lftp、ssh 等)的程序会更容易。