当前位置: 首页 > article >正文

直接用Bash发送HTTP请求 —— 筑梦之路

追踪命令执行

strace -e trace=network,open,close bash -c 'exec 3<>/dev/tcp/example.org/80'

关键部分

socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("93.184.215.14")}, 16) = 0

检查文件描述符

ls -lat /proc/self/fd/

lrwx------ 1 user user 64 Aug 25 15:01 0 -> /dev/pts/0
lrwx------ 1 user user 64 Aug 25 15:01 1 -> /dev/pts/1
lrwx------ 1 user user 64 Aug 25 15:01 2 -> /dev/pts/2
lrwx------ 1 user user 64 Aug 25 15:01 3 -> 'socket:[2910856]'
lr-x------ 1 user user 64 Aug 25 15:01 4 -> /proc/1579316/fd

3是连接到example.org的套接字的文件描述符

重点来了:

exec 3<> /dev/tcp/...这个语法。它的含义是: "创建一个用于输入和输出操作的套接字,并将其分配给进程标识符为3的文件描述符。


发送http请求

echo -ne "GET / HTTP/1.1\r\nHost: example.org\r\n\r\n" >&3

读取响应结果

cat <&3

HTTP/1.1 200 OK
Age: 243157
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sun, 25 Aug 2024 14:15:54 GMT
Etag: "3147526947+ident"
Expires: Sun, 01 Sep 2024 14:15:54 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECAcc (dcd/7D77)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    ...
</head>
<body>
    <div>
        <h1>Example Domain</h1>
        <p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p>
        <p><a href="https://www.iana.org/domains/example">More information...</a></p>
    </div>
</body>
</html>


关闭套接字

exec 3<&-

搜集来自掌握Bash的秘密:直接用Bash发送HTTP请求的终极指南


http://www.kler.cn/a/325599.html

相关文章:

  • Android 源码编译资料集
  • 【D3.js in Action 3 精译_040】4.4 D3 弧形图的绘制方法
  • UniAPP快速入门教程(一)
  • 学习记录:js算法(九十九):冗余连接
  • Vue3 虚拟列表组件库 virtual-list-vue3 的使用
  • Java策略模式应用实战
  • 【代码随想录Day27】贪心算法Part01
  • C#基于SkiaSharp实现印章管理(10)
  • 【Linux的内存管理】
  • zy81_C#中在窗体中实现坐标变换
  • 基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)
  • Race Karts Pack 全管线 卡丁车赛车模型素材
  • CSS 中的@media print 是干什么用的?
  • Spark_UDF处理缺失值或空值
  • node实现大文件切片上传的方法
  • R整理数据技巧
  • 解决sortablejs+el-table表格内限制回撤和拖拽回撤失败问题
  • Redis string类型hash类型
  • 在pycharm中怎样调试HTML网页程序
  • B-树(不是B减树)原理剖析(1)
  • 有些硬盘录像机接入视频汇聚平台EasyCVR后通道不显示/显示不全,该如何处理?
  • Qt 学习第十一天:QTableWidget 的使用
  • 启动hadoop集群出现there is no HDFS_NAMENODE_USER defined.Aborting operation
  • 基于HTML、CSS和JavaScript的滚动数字显示效果,类似于老式计数器或电子表上的数字滚动效果
  • JAVA并发编程高级——JDK 新增的原子操作类 LongAdder
  • 渗透测试实战—教育攻防演练信息收集