linux telnetd 编译,telnetd源码分析
telnetd是一个telnet服务端程序
下载地址:
解压缩后进入busybox目录
make defconfig
make
make install
然后会生成 _install 目录,里面就是编译好的可执行文件
源码位于 ./networking/telnetd.c
程序流程图:
程序中非常重要的就是2个buf,位于struct tsession结构体之后
socket接收到远端的数据,写入count个字节到buf1中从rdidx1开始的空闲区域,然后size1 += count;rdidx1 += count;
pty可以写,从buf1中读取count个字节写入pty,然后size1 -= count;wridx1 += count;
pty可以读,写入count个字节到buf2中从rdidx2开始的空闲区域,然后size2 += count;rdidx2 += count;
socket可以发送数据到远端,从buf2中wridx2开始的位置读取count个字节,通过socket发送出去,然后size2 -= count;wridx2 += count;
make_new_session函数非常关键,它调用xgetpty打开一个伪终端,调用vfork创建一个子进程,父进程保存打开的伪终端和相关句柄
后返回,子进程调用setsid,关闭标准输入,打开伪终端,然后将0重定向到标准输出和标准错误,然后执行/bin/login,login执行
验证过程后启动shell程序。
以后只要父进程往获得的伪终端句柄里面写数据,就是把输入写到子进程启动的shell里面,shell执行之后,父进程通过read读取伪
终端句柄,就可以读取到shell的标准输出。 static struct tsession * make_new_session { struct tsession *ts = xzalloc fd = xgetpty(tty_name); ts->ptyfd = fd; pid =vfork(); if(pid > 0) { //父进程 return ts; } //子进程 setsid(); //设置SID close(0); //关闭标准输入 xopen(tty_name, O_RDWR); //打开伪终端,注意这个时候默认返回的是数字号最小的句柄,也就是0 dup2(0,1); //将伪终端句柄重定向到标准输出 dup2(0,2); //将伪终端句柄重定向到标准错误 execvp("/bin/login",); //执行/bin/login _exit(EXIT_FAILURE); //之后直接退出 }
linux telnetd 编译,telnetd源码分析相关推荐
- linux显示启动logo源码分析以及修改显示logo
1.linux显示启动logo整个流程分析 (1)logo图片在内核源码中是以ppm格式的文件保存,在编译内核时会把ppm格式的文件自动转换成.c文件,在c文件中会构造一个struct linux_l ...
- Linux brk(),mmap()系统调用源码分析3:brk()的内存申请流程
Linux brk(),mmap()系统调用源码分析 brk()的内存申请流程 荣涛 2021年4月30日 内核版本:linux-5.10.13 注释版代码:https://github.com/Rt ...
- linux系统编译内核源码的步骤演示
linux系统编译内核源码的步骤演示 在进行linux系统上面的程序开发的时候有一些驱动类的或者是要引用内核接口的时候难免不会遇到编译内核源码的情况,在这里我就进行一下内核源码的相关编译流程.整个内核 ...
- linux nDPI 协议检测 源码分析
关于nDPI的基本功能就不在这介绍了,有兴趣了解的读者可以阅读官方的快速入门指南:https://github.com/ntop/nDPI/blob/dev/doc/nDPI_QuickStartGu ...
- 在Windows和Linux上编译gRPC源码操作步骤(C++)
gRPC最新发布版本为v1.23.0,下面以此版本为例说明在Windows和Linux下编译过程. Windows7/10 vs2103编译gRPC源码操作步骤: 1. 需要本机已安装Git.CMak ...
- Linux如何编译安装源码包软件
一.什么是源码包软件: 顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件最常见:在国内源可见的软件几乎绝迹:大多开源软件都是国外出品:在国内较为出名的开源软件有fcitx;l ...
- Linux系统编程 / triggerhappy 源码分析(3.select 的应用)
哈喽,我是老吴,继续记录我的学习心得. 一.进步的滞后性 我们期望进步是线性: 每一个人付出一些努力后,都希望它有立竿见影的效果. 现实是: 做出努力后,结果的显现往往滞后. 只有在几个月或几年后,我 ...
- dnsspoof工作原理、编译、源码分析
dnsspoof 是一个DNS欺骗工具,只要给出将要重定向的域名和域名重定向到的IP,就可以实现DNS欺骗. 下载地址:http://monkey.org/~dugsong/dsniff/ dnssp ...
- linux gnu binutils,binutils源码分析之准备篇
1.什么是binutils 先写一个简单的hello_world.c程序. #include int main() { printf("Hello World!\n"); retu ...
- android 全志a10(2.3.4)开发二(linux内核编译及源码编译)
<android 全志a10(2.3.4)开发二>文档详细可下载地址:http://www.a10bbs.com/forum.php?mod=viewthread&tid=504& ...
最新文章
- Electron-Nodejs-Addon入门
- 探究C/C++可变参数
- BootStrap-select插件动态添加option无法显示
- 第 16 章 反射(Reflection)
- python——常用内置函数(enumerate、map、zip、eval)用法
- patience counts
- python基础——字典
- 11月16日站立会议
- 罗斯文2007(Northwind 2007)数据库、Access 2007 样列数据库分析[转]
- nodejs实践录:基于koa的简单web服务器
- sql server行列转化和行列置换
- 矩阵链乘——动态规划
- Java基础常见笔试题总结
- ADS添加路由失败的处理办法
- 吉林省谷歌高清卫星地图下载
- 用vs code 搭建stm32 开发环境(详细)
- 华三路由交换配置命令_华三华为交换机-路由器配置常用命令汇总
- Chrome html播放器卡顿,谷歌Chrome浏览器卡顿原因及解决办法
- 9 摄像头视频实时传输
- 卖家中心html素材,天猫素材中心入口和使用方法