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

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

  1. Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启

    中午刚想趴一会,不料锅从天降!!!Mysql连不上了....... 现象如下: 现象1:登录mysql所在服务器,连接MySQL 成功: 现象2:通过客户端远程连接MySQL,返回失败,如下: Ent ...

  2. 域名系统(DNS)反向查询

    首先我们要明白,对于一个IP地址,很有可能不存在反向的映射.而事实上很多IP地址就没有对应的域名. 在Internet标准中有定义反向DNS,和DNS自身一样是一个可选特性.因此,我们必须要为每一次反 ...

  3. 如何使用DNS反向映射来扫描IPv6地址?

    目前增加的IPv6地址空间不仅提高了对启发式算法的使用(执行IPv6地址扫描时),而且还推动了人们探索替代技术用于查找IPv6节点.本文中我们将探讨如何使用一种极其强大的向量来发现IPv6节点:使用D ...

  4. notes系统服务器地址,notes怎么连接服务器地址

    notes怎么连接服务器地址 内容精选 换一换 FTP/SFTP连接适用于从线下文件服务器或ECS服务器上迁移文件到OBS或数据库.当前仅支持Linux操作系统的FTP 服务器.连接FTP或SFTP服 ...

  5. apk 连接服务器 修改,修改apk连接服务器地址

    修改apk连接服务器地址 内容精选 换一换 系统提示无法下载脚本或使用Linux系统方式二安装Agent时失败.原因1:DNS无法正常解析OBS的域名.原因2:目标云服务器openssl版本过低.原因 ...

  6. linux查询服务器的dns,如何查看Linux系统中DNS服务器的运行状况

    DNS是分布式数据库,可以让用户们方便访问互联网,而主机的dns服务器也直接影响了我们上网及访问网站的速度,那么你知道如何查看Linux系统中DNS服务器的运行状况吗? 在Linux环境下,也提供了广 ...

  7. mysql dns反向解析_Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)

    Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve) 时间:2019-01-19 11:28作者:网友投稿 MySQL数据库收到一个网络连接后,首先拿到对方的IP地址, ...

  8. Linux中DNS服务器地址查询命令nslookup使用教程

    这篇文章主要介绍了Linux中DNS服务器地址查询命令nslookup使用教程,是Linux服务器运维的必备知识,需要的朋友可以参考下 nslookup 程序是DNS 服务的主要诊断工具,它提供了执行 ...

  9. 《网络是怎样连接的》第一章第二节:向DNS服务器查询Web服务器的IP地址

    <网络是怎样连接的>第一章:浏览器生成消息 概述:这本书以 "从在浏览器输入网址,到屏幕显示出网页,当中到底发生了什么?"为疑问,探究其中的过程.本章讲的是浏览器怎么把 ...

  10. django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

    2019独角兽企业重金招聘Python工程师标准>>> 1.多表连接查询:当我知道这点的时候顿时觉得django太NX了.   class A(models.Model):      ...

最新文章

  1. Oracle 中对表空间使用情况进行查询
  2. 互联网推广方案:如何提高企业网站排名!
  3. 3D Printer 开发进程一。 步进电机升降台设计图纸。
  4. [转载]PHP 计算时间差
  5. dos 注册服务器,DOS命令实现服务器断线短信通知
  6. 字体的样式设置和字体分类
  7. Smart3D中空三的设置
  8. 官方版WIN10PE如何添加explorer?
  9. Windows下安装dilb解决方法
  10. 第一个FPGA项目:led_flash简介项目流程和项目中遇到的问题
  11. vite报错 process is not defined
  12. Qcon 实时音视频专场:实时互动的最佳实践与未来展望
  13. 软件测试与质量保证-测试一
  14. 计算机公开课课前互动小游戏,幼儿园10个师幼互动小游戏 让你的课堂马上活跃嗨起来!...
  15. OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
  16. 业务与信息系统乱弹琴
  17. JavaSE(this与super关键字;关联、依赖关系)
  18. 新项目导入的时候遇到的问题
  19. 一文看懂ARM Cortex-M处理器
  20. C语言编程规范学习笔记和总结(附华为编程规范机试参考试题)

热门文章

  1. getSelectionStart() doesn't work in android, is always 0
  2. 全栈创建一个小程序(mpvue+nodejs+mysql)---(一)--本地开发
  3. 小程序学习笔记(5)-目录结构介绍
  4. Request header field mytoken is not allowed by Access-Control-Allow-Headers in preflight (请求头设置问题)
  5. C语言文件的存储和处理实验报告,c语言文件处理实验报告(6页)-原创力文档...
  6. centos7使用kubeadm部署k8s集群(使用containerd做运行时)
  7. 图片夹_【第8期】EHS大咖答疑解惑吊运事故的罪魁祸首之一:钢丝绳夹!不看不知道!...
  8. 合工大计算机与信息学院保研,合肥工业大学计算机与信息学院(专业学位)计算机技术保研细则...
  9. exfat最佳单元大小_回音壁构造和单元相关的个人看法
  10. 零基础多久能学会python_零基础小白多久能学会python