获取百度主页和系统调用

2023-05-16

获取百度主页

exec 8<> /dev/tcp/www.baidu.com/80

知识点:

  • linux系统中一切皆文件
  • 把这个8理解为Java中的引用对象
  • exec 文件重定向
  • 文件描述符
cd /proc/$$/fd

知识点:

  • /proc文件夹
  • $$当前进程ID
  • fd
ll

知识点:

  • 此时已与百度建立socket连接(TCP连接已经有了,三次握手)
  • 什么是三次握手四次分手
  • 怎么连接的?
  • 什么是socket ?socket 通信✨

下一步我要和百度说什么话,百度能给我主页,此时与HTTP有关

发这样的话:

GET / HTTP/1.0\n

那怎样发过去呢?

echo -e 'GET / HTTP/1.0\n' 1>& 8

知识点:

  • -e
  • 标准输入标准输出
  • &

此时回车,咔,内容就发给百度了,那百度就得给我们返回内容,那么返回的东西怎么看呢?

这样看

cat 0<& 8

知识点:

  • cat
  • 标准输入标准输出

Java Socket编程

/**
 * @author tengwz
 */
public class TestClient  {
    public static void main(String[] args) throws Exception {


        Socket socket = null;
        InputStream is = null;
        OutputStream ops = null;

        
            try {
                socket = new Socket("www.baidu.com", 80);

                is = socket.getInputStream();
                ops = socket.getOutputStream();

                ops.write("GET / HTTP/1.1\n".getBytes());
                ops.write("HOST:www.baidu.com\n".getBytes());
                ops.write("\n".getBytes());

                int i = is.read();
                while (i != -1) {
                    System.out.print((char) i);
                    i = is.read();
                }

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != is) {
                    is.close();
                    is = null;
                }
                if (null != ops) {
                    ops.close();
                    ops = null;
                }
                if (null != socket) {
                    socket.close();
                    socket = null;
                }

            }
        
    }

}

/**
 * @author tengwz
 */
public class TestServer {
    public static void main(String[] args) throws IOException  {
        ServerSocket serverSocket=null;
        Socket socket = null;
        OutputStream outputStream = null;
        try {
            serverSocket = new ServerSocket(8080);
            while (true) {
                socket = serverSocket.accept();
                outputStream = socket.getOutputStream();
                outputStream.write("HTTP/1.1 200 OK\n".getBytes());
                outputStream.write("Content-Type:text/html".getBytes());
                outputStream.write("Server:Apache-Coyote/1.1\n".getBytes());
                outputStream.write("\n\n".getBytes());
                StringBuffer stringBuffer = new StringBuffer();
                stringBuffer.append("<html>");
                stringBuffer.append("<head><title>title</title></head>");
                stringBuffer.append("<body>");
                stringBuffer.append("<h3> header</h3>");
                stringBuffer.append("<a href='http://www.baidu.com>baidu</a>");
                stringBuffer.append("</body>");
                stringBuffer.append("</html>");
                outputStream.write(stringBuffer.toString().getBytes());
                outputStream.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (null != outputStream) {
                outputStream.close();
                outputStream = null;
            }
            if (null != socket) {
                socket.close();
                socket = null;
            }
        }
    }
}


tcpdump

yum install tcpdump
tcpdump -nn -i eth0 port 80

监听80端口

知识点:

  • ifconfig
  • 数据传送
  • ip
  • 三次四次
curl www.baidu.com

作用:,默认80端口,对百度建立tcp三次握手,发送协议返回数据,关闭连接。

研究三次握手四次挥手过程


nc

yum install nc
nc -l 8080
nc localhost 8080
ps -fe | grep nc
  • ps用法
  • 未建立连接时,服务端为什么会出现一个socket?
  • 建立连接后两个socket

strace

yum install strace

追踪程序和内核的系统调用

strace -ff -o out nc -l 8080
strace -ff -o out java Hello

产生文件out.nc程序的进程id号
如果是多线程的,则生成多个文件

举例

man 2 socket

通过观察accept,read,三次握手过程,理解BIO,

知识点:

  • C语言
  • 系统调用system call
  • 操作系统
  • BIO
  • NIO

BIO


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

获取百度主页和系统调用 的相关文章

  • SQLyog错误解决方案

    使用sqlyog连接 Mysql 出现的错误 使用sqlyog连接 Mysql 出现的错误 使用sqlyog连接 Mysql 出现的错误使用sqlyog连接 Mysql 出现的错误1251错误原因 xff1a 解决方案 xff1a 使用sq
  • ubuntu在更新软件时出现E: Release file for http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease

    问题 E Release file for http security ubuntu com ubuntu dists bionic security InRelease is not valid yet invalid for anoth
  • LeetCode之二分查找实战2之第一个错误的版本(278)、猜数字大小(374)

    二分查找2 1 第一个错误的版本 278 2 猜数字大小 xff08 374 xff09 1 第一个错误的版本 278 题目描述 xff1a 简单题 你是产品经理 xff0c 目前正在带领一个团队开发新的产品 不幸的是 xff0c 你的产品
  • python之逻辑回归项目实战——信用卡欺诈检测

    信用卡欺诈检测 1 项目介绍2 项目背景3 分析项目4 数据读取与分析4 1 加载数据4 2 查看数据的标签分布 5 数据预处理5 1 特征标准化5 2 使用下采样解决样本数据不均衡 6 训练数据即划分数据集7 模型建立7 1 sklear
  • C++ 全局变量的跨文件使用

    文章目录 前言一 extern的使用二 容易犯的错误 前言 在写C 43 43 工程文件的时候 xff0c 往往会用到一些所有类都使用的数据 xff0c 比如数据文件等 xff0c 一种写法是写成静态类 xff0c 调用数据时使用类名加属性
  • VS2019使用C++创建winform界面

    用C 43 43 实现winform界面 算是对上一篇文章的补充吧 xff0c 实际上不需要那么繁琐也可以做到 事先准备 打开VS xff0c 新建一个CLR项目 如果在选项中没有发现CLR项目 xff1a 1 找到Visual Studi
  • c++面试题(亲测常问)

    注意 xff1a 此题为我自己面试被问到的 xff0c 及一些摘抄的 xff0c 如有侵权请联系我马上删除 xff01 1 2 32位指针地址所占字节数 为四 举例说明 xff1a char p char test 10 p 61 test
  • torchvision与torch的对应关系及下载链接

    https github com pytorch vision 另外 xff1a Ubuntu18下编译安装torchvision C 43 43 API的详细过程
  • Logisim计算机组成原理实验16位无符号比较器设计

    Logisim用4位无符号比较器构建16位无符号比较器 4位无符号比较器设计思路表达式构建 16位无符号比较器构建思路构建 4位无符号比较器设计 思路 不同位之间进行比较 xff0c 高位优先 真值表太麻烦 xff0c 可以利用表达式进行构
  • React+hooks+TS练习

    一 初始化项目 通过create react app命令创建项目 xff0c template表示使用typescript xff08 node版本高于14才能使用npx xff09 npx create span class token
  • 基于Python的信用卡欺诈检测机器学习案例报告

    本报告借助Python语言探究了在机器学习中 面对一个大型的人与人之间交易的数据集 如何尽快处理大量数据并区分某交易记录是正常的用户行为还是潜在的信用卡欺诈行为 最终通过构建分类模型来对欺诈交易进行分类区分 并通过恰当的方式对构建的模型进行
  • 一个既有趣又简单的整人代码——关机代码

    这一篇博客来的比我的预计时间要长啊 xff0c 在这一周多的时间里 xff0c 我几乎很少有休息和出去玩耍的时间 说实话 xff0c 这样忙碌的生活给我的感觉还是蛮好的 xff0c 让我有一种很充实的感觉 xff0c 有种自己在与时间赛跑的
  • 【CMake】CMakeList编写整理

    什么是CMake 如果软件想跨平台 xff0c 必须要保证能够在不同平台编译 而如果使用 Make 工具 xff0c 就得为每一种标准写一次 Makefile CMake 就是针对上面问题所设计的工具 xff1a 它首先允许开发者编写一种平
  • 解决 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...警告

    解决 WARN util NativeCodeLoader Unable to load native hadoop library for your platform using builtin java classes where ap
  • Vue获取数组的数组数据

    Q xff1a 如何在vue获取数组的数组 xff1f A xff1a 用到js的map对象方法 一 data里要先定义好有两个数组 二 主要代码 这样就可以获取到数组的子数组数据
  • Ubuntu18.04 GAAS学习笔记

    GAAS学习笔记 1 环境构建1 1 依赖项安装1 2 ros安装1 3 MAVROS安装1 4 PX4 Firmware安装 全程参考官方文档 xff0c 总结遇见的错误 xff1a https gaas gitbook io guide
  • ArUco标定板生成与打印

    链接如下 xff1a https span class token punctuation span span class token operator span chev span class token punctuation span
  • ROS工作空间与功能包

    工作空间 工作空间 xff08 workspace xff09 是一个存放工程开发相关文件的文件夹 xff0c 其目录下有 xff1a src xff1a 代码空间 xff08 Source Space xff09 build xff1a
  • Ubuntu20.04安装UHD及GUN Radio3.9

    目录 1 安装UHD依赖库及UHD 2 安装GNU Radio3 9 3 1 安装UHD依赖库及UHD 总结自 xff1a USRP Hardware Driver and USRP Manual Building and Installi

随机推荐

  • ros安装的依赖问题

    问题描述 xff1a ros kinetic desktop full 依赖 ros kinetic desktop 但是它将不会被安装 依赖 ros kinetic perception 但是它将不会被安装 依赖 ros kinetic
  • STM32MP157驱动开发——字符设备驱动

    一 简介 字符设备是 Linux 驱动中最基本的一类设备驱动 xff0c 字符设备就是一个一个字节 xff0c 按照字节 流进行读写操作的设备 xff0c 读写数据是分先后顺序的 比如我们最常见的点灯 按键 IIC SPI xff0c LC
  • Java样卷

    一 问答题 请解释一下Java语言的主要特点 至少说明五个特点 进程和线程的概念是什么 xff1f 两者有什么区别和联系 什么是流 xff1f 什么是字节流 xff1f 什么是字符流 xff1f 字节流和字符流的差别是什么 xff1f 二
  • CodeBlocks如何将英文环境改为中文

    一 下载汉化包 xff08 链接如下 xff09 链接 xff1a https pan baidu com s 1U FMZuFvFQ9 70whXcIwQ 提取码 xff1a 2333 二 选择路径 将汉化包中的文件 xff08 Code
  • 浅谈多任务学习

    目录 一 前言及定义 二 多任务学习 xff08 MTL xff09 的两种方法 2 1 参数的硬共享机制 xff08 hard parameter sharing xff09 2 2 参数的软共享机制 xff08 soft paramet
  • PyTorch在GPU上跑代码需要迁移哪些东西?

    一 数据 模型 损失函数需要迁移到GPU上 使用GPU训练时 xff0c 数据 函数和模型都必须同时放在GPU上 xff0c 否则会出错 xff08 1 xff09 判断GPU是否可用 if torch cuda is available
  • C++ Primer 第五版学习 第一、二章

    一 标准输入输出 cin是标准输入 xff08 istream对象 xff09 cout是标准输出 xff08 ostream xff09 cerr是标准错误 xff0c 用来输出警告和错误消息 clog用来输出程序运行时的一般性信息 二
  • C++ Primer第五版学习 第四章第五章

    补第三章 size t size t是一些C C 43 43 标准在stddef h cstddef中定义的 这个类型足以用来表示对象的大小 size t的真实类型与操作系统有关 在32位架构中被普遍定义为 xff1a typedef un
  • C++笔试题

    1 用预处理指令 define声明一个常数 xff0c 用以表明1年中有多少秒 xff1f define SECONDS PER YEAR 60 60 24 365 UL 2 写一个标准宏MIN xff0c 这个宏输入两个参数并返回较小的一
  • C++ Primer第五版学习 第十章

    泛型算法为什么叫泛型 可以运用在多种容器类型之上 xff0c 而容器内的元素类型也可以多样化 标准库算法对迭代器而不是容器进行操作 因此 xff0c 算法不能直接添加或删除元素 find iter1 iter2 value 搜索算法 前两个
  • kindle操作:传输下载的书籍、更改书籍封面

    kindle 可以使用 calibre 软件进行电子书的管理 xff0c 官网下载地址为 xff1a https calibre ebook com download calibre 是一款电子书管理的开源软件 xff0c 支持Window
  • C++ Primer第五版学习 第十一章

    一 关联容器类型 按关键字有序保存元素 map关联数组 xff0c 保存关键字 值对set关键字即值 xff0c 即只保存关键字的容器multimap关键字可重复出现的mapmultiset关键字可重复出现的set 无序集合 unorder
  • C++ Primer第五版学习 第十二章

    一 三种内存 静态内存 xff1a 保存局部static对象 类static数据成员以及定义在任何函数之外的变量 栈内存 xff1a 保存定义在函数内的非static对象 分配在静态内存和栈内存中的对象由编译器自动创建和销毁 对于栈对象 x
  • EC20、RM500Q在TX2上或其他设备上模块识别不到

    首先本人使用的是minipcie接口 xff0c RM500Q也是转成minipcie接口接入设备的 xff0c 然后运行命令lsusb xff0c 看不到这些模块 曾尝试在两个设备上移植过EC20和RM500都遇到同样的问题 xff0c
  • 【NVIDIA】显卡报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver

    输入nvidia smi报错如下 xff1a NVIDIA SMI has failed because it couldn 39 t communicate with the NVIDIA driver Make sure that th
  • 笑容逐渐消失? shader 编程入门实战 ! Cocos Creator!

    编程斗图 xff01 随手拈来 xff01 文章底部获取完整代码 xff01 效果预览 为了实现这个效果 xff0c 需要准备两张相近的图片 在 Cocos Creator 编辑器中 xff0c 新建一个材质 Material xff0c
  • Windows安装TensorFlow教程(国内源安装附上各大镜像网站网址)

    安装TensorFlow TensorFlow由Google公司打包成一个 pip 安装包 xff0c 可以用正常安装包的方式安装 TensorFlow xff0c 即进入命令行执行下面这一条简单的语句 正常安装 xff1a pip ins
  • Openstack-Rocky 一键安装(多节点搭建)~步骤超详细

    本次openstack多节点自动化安装 xff0c 采用4台虚拟机节点为演示环境 xff0c 首先演示如何自动化快速搭建一套openstack云平台 实验环境 xff1a 1 控制节点 CPU xff1a 双核双线程 CPU虚拟化开启 内存
  • python 更新pip报错 解决方法大全

    python 更新pip报错 解决方法大全 在使用Python的pip安装第三方库时会提示当前pip版本低 xff0c 要求更新 xff0c 但更新时会报错 xff0c 请依次尝试以下几种方法 xff1a 在使用Python的pip安装第三
  • 获取百度主页和系统调用

    获取百度主页 span class token function exec span 8 span class token operator lt span span class token operator gt span dev tcp