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

禁用Dropbear中DNS反向查询连接客户端地址补丁

Dropbear 是一套来自澳大利亚的轻量的sshd服务器,与OpenSSH相比,他更简洁,更小巧,运行起来占用的内存也更少,因此在嵌入式环境被广泛中使用.
Dropbear 与 OpenSSH在客户端连接到服务器时都有一个相同的动作:就是会向设备配置的DNS Server反向查询客户端地址. 如果设备配置的DNS服务器地址有问题或速度比较慢, 就会导致客户端连接时产生延时,在客户端产生停顿了感觉. 而OpenSSH 可以通过在sshd_config中配置"UseDNS No"来禁用此动作,而Dropbear却没有可配置的选项.

通过查看Dropbear代码, 发现Dropbear在每次客户端连接成功后都会调用getnameinfo去获取客户端连接信息(svr-main.c:main_noinetd/main_inetd->dbutils.c:getaddrstring/getaddrhostname). 所以只要将dbutils.c:getaddrstring/getaddrhostname两个函数代码中调用getnameinfo获取地址信息修改为获取简单的地址端口即可.

这里采用了kernel中的宏NIPQUAD来打印ipv4网络字节序地址:
#define NIPQUAD(addr) \
((unsigned char *)&addr)[0], \
((unsigned char *)&addr)[1], \
((unsigned char *)&addr)[2], \
((unsigned char *)&addr)[3]

以下是patch:

diff -Nur dropbear-0.52.orig/dbutil.c dropbear-0.52/dbutil.c --- dropbear-0.52.orig/dbutil.c 2008-11-11 22:09:02.000000000 +0800 +++ dropbear-0.52/dbutil.c 2010-09-20 02:09:17.000000000 +0800 @@ -550,9 +550,25 @@ #endif #endif +// modified by kangzy +#if 0 ret = getnameinfo((struct sockaddr*)addr, len, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICSERV | NI_NUMERICHOST); - + printf( "getnameinfo return %d.\n", ret ); +#else +#define NIPQUAD(addr) \ + ((unsigned char *)&addr)[0], \ + ((unsigned char *)&addr)[1], \ + ((unsigned char *)&addr)[2], \ + ((unsigned char *)&addr)[3] + + { + struct sockaddr_in *sa = (struct sockaddr_in *)addr; + snprintf(hbuf, NI_MAXHOST, "%.u.%u.%u.%u", NIPQUAD(sa->sin_addr)); + snprintf(sbuf, NI_MAXSERV, "%d", sa->sin_port ); + } + ret = 0; +#endif if (ret != 0) { /* This is a fairly bad failure - it'll fallback to IP if it * just can't resolve */ @@ -599,10 +615,13 @@ #endif #endif - +// modified by kangzy +#if 0 ret = getnameinfo((struct sockaddr*)addr, len, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), flags); - +#else + ret = EAI_NONAME; +#endif if (ret != 0) { /* On some systems (Darwin does it) we get EINTR from getnameinfo * somehow. Eew. So we'll just return the IP, since that doesn't seem

相关文章:

  • Windows Phone开发(29):隔离存储C
  • 马宁的Windows Phone 7开发教程(3)——XNA下使用MessageBox和软键盘
  • STP详解
  • 又见西安
  • 一次失败的网购:在兰蔻官网订购的货不对版
  • 多线程试题汇总
  • CentOS上配置LVS DR集群
  • Android应用加入微信分享
  • nowrap要与回车换行符结合才有意义
  • XMPP 基础
  • 初学3ds Max,做了个雪人,大家来评评哪个更好看
  • 精彩十年(3)——初露锋芒
  • Java常用工具类的使用
  • 精彩十年(4)——缔造神话
  • HibernateDaoSupport实现分页技术总结
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 3.7、@ResponseBody 和 @RestController
  • egg(89)--egg之redis的发布和订阅
  • iOS小技巧之UIImagePickerController实现头像选择
  • MQ框架的比较
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Python中eval与exec的使用及区别
  • redis学习笔记(三):列表、集合、有序集合
  • springMvc学习笔记(2)
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 规范化安全开发 KOA 手脚架
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 计算机在识别图像时“看到”了什么?
  • 来,膜拜下android roadmap,强大的执行力
  • 批量截取pdf文件
  • 第二十章:异步和文件I/O.(二十三)
  • ​ubuntu下安装kvm虚拟机
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #QT(串口助手-界面)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $.ajax()参数及用法
  • (附源码)计算机毕业设计ssm电影分享网站
  • (三分钟)速览传统边缘检测算子
  • (转)Linux下编译安装log4cxx
  • (转)nsfocus-绿盟科技笔试题目
  • (转)ObjectiveC 深浅拷贝学习
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • *Django中的Ajax 纯js的书写样式1
  • .NET Core 项目指定SDK版本
  • .NET Standard 的管理策略
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .Net 垃圾回收机制原理(二)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .net流程开发平台的一些难点(1)
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /usr/bin/env: node: No such file or directory
  • :如何用SQL脚本保存存储过程返回的结果集