在谷歌搜索后,我发现我们可以telnet将网络服务器连接到其 http 端口并用于GET检索 html 页面。
例如:
$ telnet web-server-name 80
Run Code Online (Sandbox Code Playgroud)
但我无法理解这怎么可能?
我认为如果端口 80 用于 http 服务器,那么端口 80 只会侦听http请求。但是我怎么能telnet到一个HTTP端口呢?
不是telnet和HTTP两个不同的协议吗?
有没有一种简单的方法可以通过 HTTP 使文件夹与目录列表保持同步?
编辑:
感谢 wget 的提示!我创建了一个 shell 脚本并将其添加为 cron 作业:
remote_dirs=( "http://example.com/" "…") # Add your remote HTTP directories here
local_dirs=( "~/examplecom" "…")
for (( i = 0 ; i < ${#local_dirs[@]} ; i++ )) do
cd "${local_dirs[$i]}"
wget -r -l1 --no-parent -A "*.pdf" -nd -nc ${remote_dirs[$i]}
done
# Explanation:
# -r to download recursively
# -l1 to include only one directory depth
# --no-parent to exclude parent directories
# -A "*.pdf" to accept only .pdf files
# …Run Code Online (Sandbox Code Playgroud) 我想从我的桌面查看所有传出 HTTP 请求的列表。我认为应该可以使用服务器名称指示 (SNI) 监控本地客户端的 HTTPS 主机名。
OS X 有一个很好的 GUI 实用程序,称为Little Snitch,它是一个基于应用程序的 HTTP 监视器和防火墙规则前端。
我会满足于一个不错的终端实用程序。tcpdump是矫枉过正,因为我只想实时查看流量的去向而不是传输的数据。理想情况下,我也想看看是什么进程发出了请求,但只要看看是什么拨号回家就不错了。
我有一台机器,我希望在上面安装多个远程服务器以集中访问它们。对于基于 Linux 的远程系统,我使用的 SSHFS 工作正常。但是对于 Windows 系统或没有 SSH 的系统,它们都安装了某种形式的 HTTP 服务器来共享文件(因此它们都启用了目录浏览)。
我可以像 SSHFS 一样将 HTTP 服务器安装为本地文件系统,以便我可以在本地安装所有这些远程服务器并以统一的方式呈现吗?
我正在使用 wget 下载静态 html 页面。W3C 验证器告诉我该页面以 UTF-8 编码。然而,当我在下载后查看文件时,我得到了一堆二进制废话。我在 Ubuntu 上,我认为默认编码是 UTF-8?这就是我的语言环境文件似乎所说的。为什么会发生这种情况,我该如何纠正?
另外,看起来像Content-Encoding: gzip。也许这会有所不同?
这是一个简单的请求:
wget https://www.example.com/page.html
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
wget https://www.example.com/page.html -q -O - | iconv -f utf-16 -t utf-8 > output.html
Run Code Online (Sandbox Code Playgroud)
哪个返回: iconv: illegal input sequence at position 40
cat'ing 文件返回如下所示的二进制文件:
l???u?`?q"?:)s??d?__??~i??6n)T?$H?#???QJ
Run Code Online (Sandbox Code Playgroud)
结果xxd output.html | head -20:
00000000: 1f8b 0800 0000 0000 0003 bd56 518f db44 ...........VQ..D
00000010: 107e a6bf 62d4 8a1e 48b9 d8be 4268 9303 .~..b...H...Bh..
00000020: 8956 082a 155e 7a02 21dd cbd8 3bb6 97ae .V.*.^z.!...;... …Run Code Online (Sandbox Code Playgroud) 我想在我的 makefile 中使用来自万维网的文件作为先决条件:
local.dat: http://example.org/example.gz
curl -s $< | gzip -d | transmogrify >$@
Run Code Online (Sandbox Code Playgroud)
如果远程文件比本地文件新,我只想“transmogrify”,就像make正常操作一样。
我不希望保留的高速缓存副本example.gz -文件都很大,而且我不需要原始数据。最好我想完全避免下载文件。目标是使用-jmake 标志并行处理其中的一些。
什么是解决这个问题的干净方法?我可以想到几种方法:
在进一步挖掘之前,我需要一些建议,最好是具体的例子!
我可以轻松地使用 Netcat(或 Socat)来捕获我的浏览器和特定主机:端口之间的流量。
但是对于 Linux,是否存在类似 Squid 的 HTTP 代理的任何命令行对应物,我可以使用它来捕获我的 HTTP 客户端(浏览器或命令行程序)和任意主机:端口之间的流量?
一个主要的缺点curl是越来越多的网页的主要内容是由在初始 HTTP 响应之后发生的 JavaScript AJAX 响应绘制的。curl从不接受这个后期绘制的内容。
因此,为了从命令行获取这些类型的网页,我只能用 Ruby 编写脚本来驱动 SeleniumRC 启动 Firefox 实例,然后在这些 AJAX 调用完成后返回源 HTML。
为此类问题提供更精简的命令行解决方案会好得多。有谁知道吗?
假设我有一个防火墙,可以阻止来自所有来源/目的地的所有端口。
我需要打开哪些端口才能成功运行:
ping google.com
Run Code Online (Sandbox Code Playgroud)
...还有我必须打开的任何其他端口才能通过浏览器浏览 google.com 吗?
我试过打开端口 53(dns) 80(http) 和 443(https);这还不够,我正在使用 iptables 但我不是在询问如何在 iptables 上配置它,我只是询问需要打开哪些端口,而不管您可能使用的是哪个基于端口的防火墙。
我需要在各种情况下测试我的 http 服务器响应,即使身份验证失败也是如此。如果身份验证失败,我的服务器将返回401 Unauthorized一个响应主体,其中包含简单的Unauthorized(或者可能是其他一些详细消息)。
使用 eg curlor httpie,我得到了那些响应体,以防万一401。
$ curl http://10.5.1.1/bla
Unauthorized
$ curl http://10.5.1.1/bla --digest --user joe:wrong
Unauthorized
$ http http://10.5.1.1/bla -b
Unauthorized
$ http http://10.5.1.1/bla -b --auth-type digest --auth joe:wrong
Unauthorized
Run Code Online (Sandbox Code Playgroud)
但是当使用 wget 尝试这个时,我没有输出:
$ wget http://10.5.1.1/bla -q -O /dev/stdout
$ wget http://10.5.1.1/bla -q -O /dev/stdout --user joe --password wrong
Run Code Online (Sandbox Code Playgroud)
在这种情况下,wget 返回退出代码 6,但我需要检查响应消息。
这是使用 httpie 捕获的完整流量的转储:
$ http http://10.5.1.1/bla --print hbHB
GET /bla HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: …Run Code Online (Sandbox Code Playgroud) http ×10
wget ×3
networking ×2
remote ×2
command-line ×1
curl ×1
dns ×1
filesystems ×1
firewall ×1
gnu-make ×1
gzip ×1
html ×1
https ×1
monitoring ×1
mount ×1
ping ×1
privacy ×1
proxy ×1
selenium ×1
squid ×1
telnet ×1
timestamps ×1