问题标签 [gethostbyname]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - gethostbyname() 不工作
我正在尝试查找我的来源的 IP,但它不起作用。
主功能:
我得到的输出是“源 macbook 未知”。
powershell - Powershell 脚本错误处理 CSV 数据
我正在编写一个脚本来从 CSV 文件加载计算机名称,然后查找它们的 IP 地址。
使用 CSV 中的名称时,脚本会产生错误。
如果我在 ISE 中运行脚本,则会出现错误,但结果仍然存在。如果我从 powershell 运行脚本,它会出错并且结果为空。
如果我用 代替$PCname = $_.System
一切$PCname = "Computer01"
正常。
如果我写主机$_.System
它显示"Computer01"
. 我怎样才能让它在PowerShell中工作?
显示的错误是:
使用“1”参数调用“GetHostByName”的异常:“请求的名称有效,但未找到请求类型的数据”
c - gethostbyname/getaddrinfo 不断失败,即使互联网连接已启动
背景
我们有一个小型无头机器,运行 Linux 内核 2.6.35 和一些在 ARM 硬件上的 Open Embedded 发行版。
据我们所知,我们使用的是 glibc 2.10.1。
该盒子有一个未连接的以太网和一个串行连接的 GSM/3G 调制解调器。我们已配置 PPP 以确保继续连接到 Internet。这部分工作没有问题。
我们有一个用 c(实际上是 c++)编写的程序,它使用套接字建立一些连接。该程序是使用 pthreads 进行大量多线程处理的。
要查找要连接的 IP 地址,我们使用 gethostbyname()。
当没有连接到 Internet 时,例如在初始启动期间或 SIM 卡从调制解调器中取出时,gethostbyname() 会返回 NULL,因为它应该返回 NULL。
症状
但有时 gethostbyname() 会一直返回 NULL,即使 Internet 连接已启动并正在运行。
使用时来自 getaddrinfo() 的错误代码是 EAI_NONAME ~“名称或服务未知”。我们手头没有来自 gethostbyname() 的错误代码,但它是等价的。
我们的分析
我们已通过(通过串行控制台)确保互联网连接正常
- 项目清单
- 查看 /var/log/messages 并确保 pppd 表示一切正常
- ping 主机名(转换为 IP 并回复 ok)
- 通过公共 IP 通过 ssh 连接到盒子
我们在进程中有两个线程对同一主机使用 gethostbyname()。它们的代码路径和函数略有不同,但对套接字函数使用通用代码,包括调用 gethostbyname() 的部分。
在 gethostbyname() 不断返回 NULL 的情况下,这通常只适用于其中一个线程,而不是每次都相同。另一个使查找完美。
此外,gethostbyname() 失败的线程可以通过简单的受控停止该线程并重新启动该函数来轻松启动,然后重新启动一个新线程 pthread-wise。
总的来说,我们确信 DNS 翻译和互联网连接在操作系统级别运行良好。
为了排除线程问题,我们使用 getaddrinfo() 重新实现了查找代码,根据手册页,它是可重入的。并得到完全相同的结果。
对我们来说,线程的退出似乎会导致某种影响 gethostbyname()/getaddrinfo() 进行查找的能力的清理。
一种解决方法是强制退出失败的线程,但这意味着应用程序结构的重大变化,并不是真正的选择。
问题
所以问题是:您是否有任何指示可以在哪里寻找解决方案或真正的问题可能在哪里?
gdb - 静态链接的 GDB 不能在目标远程中使用 HostName
GDB 基于 RHEL-4.7 构建。我在 RHEL-6.3 上运行 GDB。如果 GDB 是动态链接的,那么一切正常。如果 GDB 是静态链接的,我得到了
静态构建 GDB 时,我们收到一条警告消息:
我也用google搜索过,似乎gethostbyname依赖于glibc库。我尝试在 RHEL-6.3 上安装兼容的 glibc 库。但是没有运气。有什么提示吗?
c - gethostbyname 失败,来自 gethostbyaddr 的主机名,成功
我有以下脚本:
我想知道为什么 gethostbyname 会因先前成功的 gethostbyaddr 的主机名而失败。谁能解释我为什么?
进步:
但它适用于其他 IP 地址,如 173.194.34.129 (google.com) 等。
c - C语言中inet_aton()和gethostbyname()的区别?
我正在学习 C 和 TCP/UDP。正如标题... C 中的 inet_aton() 和 gethostbyname() 有什么区别吗?据我所知,两者都将 IP 地址从字符串转换为数字。
sockets - 我的 Android 设备(android 4.4.2)中的以太网 DNS 解析失败
我正在尝试在运行 android 4.4 的设备上启用有线以太网。我成功地启动了 eth0 接口。但是 DNS 解析没有发生。从 adb ping 地址工作正常。(如果我通过 WiFi 连接到我的路由器一次,然后 dns 得到解析并且可以使用以太网浏览)。另一个观察是,如果我不存在这个问题使用 Firefox 而不是默认浏览器。
从日志中可以清楚地看出 gethostbyname() 调用失败。当我进一步跟踪时,很明显在 android_open_proxy() 函数中打开的代理套接字不包含正确的值。
如果 (fread(buf, 1, sizeof(buf), proxy) != sizeof(buf)) 返回 NULL;
***这里 result_code 是 401(成功的情况下是 222)。
c++ - 套接字主机名查找超时:如何实现?
我编写使用套接字的可移植 Windows/Linux 应用程序。我使用gethostbyname
函数来执行 DNS 查找。但是,我看不到如何设置gethostbyname
超时并保护我的应用程序在名称查找期间不被挂起。当然也可以跑gethostbyname
在另一个线程上,这就是我所做的。但是,它仅适用于琐碎的应用程序。我的应用程序并行使用 1000-3000 个连接。在这种情况下,问题是:如何处理超时线程?我没有看到好的解决方案。我们可以“忘记”它们,但是,我们面临着程序线程数在不良网络上会增长到无穷大的风险。我们可以终止它们,但这个想法看起来很糟糕。根据我的经验,在数千个线程终止后,Windows 可能会崩溃,我不知道 Linux 在这种情况下会如何表现。此外,线程创建需要很多资源;仅仅为了运行而创建 3000 个线程并不是一个好主意gethostbyname
功能并退出。因此,对于真正复杂的应用程序,单独的线程看起来不是一个好主意。当然,另一种选择是编写自己的 DNS 客户端,但是,它也不好看。Windows 和 Linux 上是否有任何“官方”方式(或更好的可移植方式)来获取具有自定义超时的主机地址?
linux - 修改 gethostbyname (res_search) 源代码 - Linux Ubuntu 14.04 LTS
我正在尝试通过将其设置为在文件中写入随机字符串作为测试来修改 Linux 中 DNS 查找函数的行为。
Linux 使用一些 DNS 解析器功能,主要是gethostbyname。展望未来,我发现解析器函数在glibc6库中。所以,我下载了它,编译,生成了libresolv.so,libnss_dns.so动态库。然后,我替换了系统上现有的/usr/lib/x86_64-linux-gnu/。
注意:我发现这些库是通过修改gethostbyname代码并再次编译来解决查询的。然后,我看到了哪些动态库发生了变化。
通过创建一个直接使用res_query的程序(一个解析器函数)并使用-lresolv编译,它可以工作(我使用了ldd命令,它使用了我创建的解析器库)。但是,直接从代码中使用gethostbyname 、使用wget或浏览网页我无法正确使用。
我究竟做错了什么?
c++ - C++ 异步主机名解析
我有一个 epoll 服务器,它有时会使用它们的主机名表示打开传出连接。由于传入连接流的高速率,我不想阻止像getaddrinfo()
or之类的地方gethostbyname()
。当然,我可以实现一个缓存和一个新线程,在其中执行主机名解析。是否有单线程非阻塞方式将主机名解析为 IP?