问题描述
我在使用telnet的时候发现当利用telnet登入设备的是后设备会输出一段用户登入的打印,这个打印在有些特殊情况下我不希望打印如何解决?
解决办法
- 找到这个文件busybox\loginutils\login.c
- 找到login_main函数
- 找到这一行syslog(LOG_INFO, “root login%s”, fromhost);
- 删掉即可,以后shell登录都没打印了
如果仅仅想解决这个问题的话上面已给出方法直接操作即可,如果想了解定位搜索过程的往下看,我认为定位过程更值得一看,我也是百度了好久也没搜索到,打算自己查,自己查代码也花了很久才定位到位置。
步骤
排除telnetd
一开始我以为是telnetd的输出,因为必须telnetd进程开启后telnet才能连上
-
将telnetd进程开启 将标准输出和标准错误重定向 测试
-
不理解这段话的看这里传送门设备描述符章节
-
开启telnetd后再次telnet登入上去发现串口还是有登入信息打印,而且telnetd进程也没有打开串口的设备描述符,排除telnetd的打印
login
在登入telnet的时候忽然想起来ssh登入的时候也有类似的打印后来想起很有可能login可执行程序打出来的
- 测试login的打印
- 直接在串口下敲login命令输入用户名和密码发现诶对流,这就对了,那么石锤login打出来的
busybox
- 既然定位到是login打出来的那必须去buybox下面去搜索
- 分析这段打印Jan 1 01:10:19 login[234]: root login on ‘console’
- 一个是时间一个是进程号 用户名 console 这些肯定不能用作搜索条件
- 那么只能是login[ 和login on 搜索
- 搜索这两个发现在busybox 目录下搜索都搜不到, 僵住了
- 单搜login又太多没什么信息能提取
再次login
-
因为我们已经确认是login可执行程序打出来的信息那么直接看他的实现直接分析源码
-
我们知道buybox 命名有个规则就是他的main函数就是命令_main
-
所以直接定位login的实现文件(login_main)
-
发现有两个如何得知在试一下
-
我们在试试输错的情况下看看有没有线索
-
搜索Login incorrect
-
发现两个都有 --------------尴尬住了
-
等一分钟发现还有超时报错诶刚好作为线索搜索
-
诶这回只有一个文件了,就他了
-
那直接对这个文件搜索login看看有没有线索,发现没啥用的,上源码看
login.c
- 直接对着源码一顿啃,然后发现有点看不明白,诶就先大致浏览
- 直接跳到login_main看代码流程和我们登陆的流程对上看看
- 浏览代码看到这个东西
- 是不是和这个很像
- 那么看下fromhost东西是啥,一个办法直接修改busybox源码打印出来看看
- 那么 我们不急看看下面有啥线索没,修改编译时间有点长有点太亏
- main函数不长前后找找看fromhost有没有用到
- 诶发现了还真有这个Login incorrect打印不就是前面输错误的打印吗
- 连蒙带猜猜猜看,我认为输错三次他会打印出什么东西,直接输错测试下
- 诶这就舒服了直接对上这个on console 不就是上面登入的信息吗。
- 现在已经很明确了就直接找呗看到如下信息,一开始我以为root是用户信息没想到是写死的,大意了,没闪。
究极大法加打印
就现在的情况来将只能定位到root login onxxx的打印,前面的时间和进程号打印是一点没看到,没办法加打印测试
- 不加不知道一加吓一跳,原来这个时间和进程号是syslog自带的。
- 为了验证syslog的实现发现没收到,后来百度一看原来这个是c库的东西
- 他的打印格式就是这样-----------时间 进程名 [进程号]:XXXX