使用 netcat 提供包含图像的 HTTP 响应

2024-04-24

我正在尝试使用 netcat 编写一个小型 HTTP 服务器。对于纯文本文件,这工作正常,但当我尝试发送图片时,浏览器仅显示损坏图像的图标。 我所做的就是提取所请求文件的 mime 类型和大小,并将其发送给客户端。 我的示例图片的请求标头如下所示:

HTTP/1.0 200 OK
Content-Length: 197677 
Content-Type: image/jpeg

这是我的 bash 脚本,我使用 netcat 工具的 -e 选项启动它:

#!/bin/bash

# -- OPTIONS
index_page=index.htm
error_page=notfound.htm

# -- CODE

# read request
read -s input
resource=$(echo $input | grep -P -o '(?<=GET \/).*(?=\ )') # extract requested file
[ ! -n "$resource" ] && resource=$index_page # if no file requested, set to default
[ ! -f "$resource" ] && resource=$error_page # if requested file not exists, show error pag

# generate output
http_content_type=$(file -b --mime-type $resource) # extract mime type
case "$(echo $http_content_type | cut -d '/' -f2)" in
    html|plain)
        output=$(cat $resource)

        # fix mime type for plain text documents
        echo $resource | grep -q '.css$' && http_content_type=${http_content_type//plain/css}
        echo $resource | grep -q '.js$' && http_content_type=${http_content_type//plain/javascript}
    ;;

    x-php)
        output=$(php $resource)
        http_content_type=${http_content_type//x-php/html} # fix mime type
    ;;

    jpeg)
        output=$(cat $resource)
    ;;

    png)
        output=$(cat $resource)
    ;;

    *)
        echo 'Unknown type'
esac

http_content_length="$(echo $output | wc -c | cut -d ' ' -f1)"

# sending reply
echo "HTTP/1.0 200 OK"
echo "Content-Length: $http_content_length"
echo -e "Content-Type: $http_content_type\n"
echo $output

如果有人能够帮助我,我会很高兴:-)


我希望二进制数据中的特殊字符在您的 shell 脚本中处于活动状态。

我建议您通过以下方式获取文件大小:

http_content_length=`stat -c '%s' $resource`

然后你“发送”它:

...
echo -e "Content-Type: $http_content_type\n"
cat $resource
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 netcat 提供包含图像的 HTTP 响应 的相关文章

  • 带有多个嵌入图像的 VB.NET 电子邮件

    请有人给我一些关于如何发送包含多个嵌入图像的电子邮件的指示 我可以发送一封基本电子邮件 也可以使用 AlternateView 发送一封带有单个嵌入图像的电子邮件 在 bodyText 中作为 XElement 我有 img src 然后我
  • 在工厂和控制器之间共享 http.get 数据

    我成功创建了一个获取 php 文件输出 JSON 的工厂 我的问题是如何从控制器内访问它 myApp angular module myApp myApp factory mainData http gt http get gethome
  • 如何在 awk 或 sed 中编写查找所有函数(使用正则表达式)

    我有运行 python 的 bash 函数 它从标准输入返回所有找到的正则表达式 function find all python c import re import sys print n join re findall 1 sys s
  • Bash 变量:区分大小写?

    Bash shell 脚本区分大小写吗 是可变的date与DATE 是的 它区分大小写 就像 UNIX 的其余部分一样 date and DATE是两个不同的变量 makefile and Makefile是两个不同的文件 h and H是
  • 打印一个字符串,并将其特殊字符打印为文字转义序列

    我在 shell bash 脚本中有一个字符串 我想打印字符串 并将其所有 特殊字符 例如换行符 制表符等 打印为文字转义序列 例如换行符打印为 n 选项卡打印为 t 等等 不确定我是否使用了正确的术语 该示例应该能够澄清问题 Exampl
  • Android - GC 滞后于列表视图滚动“更大”的图像

    在列表视图中 我想在列表条目上绘制一个图像 这 20 张图像必须缩放以填充垂直模式的宽度 手机分辨率为 480 x 800 像素 SGS2 图像分辨率为 400x400 大小约为 100KB 我已将图像放在可绘制文件夹中 当我滚动列表时 它
  • htaccess 重定向非 www http 和 https

    我想要 http example com重定向至 http www example com https example com重定向至 https www example com 以及任何东西http whatever example co
  • 寻找 jQuery 效果来逐渐显示隐藏的 DIV/图像

    可能我错过了一些明显的东西 但我无法弄清楚如何慢慢地显示隐藏的图像 DIV 以便它从上到下显示 如果你看一下这个 jsfiddle 你会看到我试图在 jQuery 中使用 show 来显示的图像 http jsfiddle net nick
  • 使用PHP获取http url参数而不自动解码

    我有一个像这样的网址 test php x hello world y 00h 00e 00l 00l 00o 当我将它写入文件时 file put contents x txt GET x gt hello world file put
  • 使用 Dragstart PreventDefault 禁用浏览器默认图像拖动,但它也禁用我的拖动事件

    我尝试阻止浏览器默认图像在dragstart中拖动 但不知何故它也禁用了drag和dragend事件 无论如何 我可以禁用浏览器默认图像拖动 但它仍然会运行拖动和拖动结束事件 或者唯一的选择是使用背景图像 我不想这样做 因为我需要因此更改很
  • Unity-3d-5 将 16:9 的图像缩放至其他分辨率

    所以我创建了一个蛇游戏 其边框是用 2d 精灵创建的 我将游戏窗口设置为 16 9 在此分辨率下图像看起来不错 然而 扩展到其他任何东西开始让游戏看起来很奇怪 我想要调整游戏窗口的大小 如何让我的精灵根据当前分辨率拉伸和收缩 我已经尝试创建
  • bash 调整图像尺寸以适合特定大小

    我到处搜索但找不到这个问题的答案 我想精确输出一个文件夹中的所有图像 大小为 50Kb 并保持原始的宽高比 I tried ImageMagick并将大小调整为 250x250 例如 但它对我不起作用 它所做的是更改第一个尺寸并适应另一个尺
  • 在电子邮件中使用协议相对 URL 安全吗?

    关于在 HTML 中使用协议相对 URL 已有讨论 1 但是电子邮件呢 电子邮件客户端或 Gmail 等服务提供商在 HTML 电子邮件中使用时是否会删除或修改协议相对 URL 1 我可以将所有 http 链接更改为 吗 https sta
  • Bash:从给定时间减去 10 分钟

    在 bash 脚本中 如果我有一个代表时间的数字 格式为 hhmmss 或 hmmss 那么减去 10 分钟的最佳方法是什么 即 90000 gt 85000 这有点棘手 日期可以进行一般操作 即您可以执行以下操作 date date 10
  • 为什么我不能在 while 循环内评估?

    我想在循环中创建 bash 别名 其中循环从命令读取行 为了逐行读取输出 我相信我需要将输出通过管道传输到read 然而 当我这样做时 别名不存在 如果我将以下内容包含在我的 bashrc for x in a1 a2 do eval al
  • 如何垂直对齐div内的图像

    如何在包含的内容中对齐图像div Example 在我的示例中 我需要将 img in the div with class frame div class frame style height 25px img src http jsfi
  • 您可以在分块的 http 响应预告片中设置 Location 标头吗?

    HTTP 1 1 响应可以分块 spec https www rfc editor org rfc rfc2616 section 3 6 1 在最后一个块的末尾 服务器可以发送一个 预告片 其中包含附加标头 问题是 你能包括一个Locat
  • 把自己限制在HTTP1.0有什么用吗?

    我负责构建一些工具来帮助最终用户测试为什么他们的浏览器可能无法与网站配合使用 我被告知它可能不起作用的原因之一是 需要 HTTP1 1 这一行 我浏览了大多数浏览器选项 只浏览了 IE 版本 6 及更高版本 even 9 允许您禁用 HTT
  • 从 bash 脚本返回值

    我想创建一个返回值的 Bash 文件 意思是 在脚本 script a bash 中我有一定的计算 脚本 script b bash 会调用它 script a bash return 1 5 script b bash a value s
  • Bash 脚本:语法错误:意外的文件结尾[重复]

    这个问题在这里已经有答案了 我有以下文件 并且该文件上有 chmod a x 当我尝试运行它时 出现第 75 行 语法错误 意外的文件结尾 我的脚本有什么错误 我需要做什么来修复它 bin sh log directory for ascp

随机推荐