- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用以下代码,结果是正确的,但 gethostbyaddr
需要大约 30 秒。
function IPAddrToName(IPAddr: string): string;
var
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
WSAData: TWSAData;
begin
WSAStartup($101, WSAData);
SockAddrIn.sin_addr.s_addr := inet_addr(PChar(IPAddr));
HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
if HostEnt <> nil then
Result := StrPas(Hostent^.h_name)
else
Result := '';
end;
最佳答案
这不太可能是您的代码的问题(除非 WSAStartup
特别慢)。
我要做的第一件事是输出代码中每一行之间的时间(我认为最好是毫秒,使用 GetTickCount
),找出时间到底花在哪里。
gethostbyaddr
可能必须转到远程 DNS 计算机才能将 IP 地址解析为主机名。
如果您的网络设置不佳,或者包含该地址的 DNS 服务器位于西藏山区的偏远地区,则解析将需要一些时间。
从命令行输入:
nslookup x.x.x.x
(其中 x.x.x.x
是您感兴趣的 IP 地址)并查看需要多长时间。
根据您在下面标尺线之间的评论:
<小时/>我在 LAN 上工作,只有 3 台机器。此外,该网络未连接到互联网。仅一行就需要 16 秒(+/- 一些毫秒):
HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
同时:
GetHostByName(PChar(HostName));
是瞬时的。下面是Ping(即时输出)和nslookup的输出:
c:\> ping 192.168.1.22
Reply from 192.168.1.22: bytes=32 time<1ms TTL=128 Packets:
Sent = 4, Received = 4, Lost = 0 (0% loss)
c:\> nslookup 192.168.1.22
DNS request timed out.
<小时/>
我认为你的问题在于超时。看来您的网络设置可以进行 DNS 名称解析,但不能进行 IP 反向解析。
当您只需输入 nslookup
时,它应该会向您显示它正在尝试使用的 DNS 服务器,这可能会给您提供线索。
c:\pax> nslookup
Default Server: pax01.neveryoumind.com
Address: 9.190.230.75
将名称解析为 IP 地址可能不会通过 DNS 发出,而是使用本地信息进行处理。
这就是我根据当前信息所能为您提供的尽可能多的帮助。由于现在这看起来更像是一个 super 用户问题,而不是 StackOverflow,所以我会将其推到那里。
关于delphi - gethostbyaddr 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3446879/
我有一个使用此功能的 django 应用程序,我正在尝试获取访问我的应用程序的 IP 地址的计算机名称。我正在使用 django-ipware 来执行此操作要获取客户端的 IP 地址,这部分工作正常。
我使用以下代码,结果是正确的,但 gethostbyaddr 需要大约 30 秒。 function IPAddrToName(IPAddr: string): string; var So
我正在为 telnet 客户端编写 C++ 代码。我在从用户输入中获取主机地址时遇到问题。 struct in_addr peers; cin>>peers; peerserver = gethost
#include #include #include #include #include int main () { in_addr ip; ip.s_addr = inet
出于某种原因 valgrind 不断抛出以下错误: ==6263== Invalid read of size 4 ==6263== at 0x40151B9: (within /lib/ld-
我正在提供一个IP地址:64.78.58.91,我想使用GetHostByAddr()win32 API检索主机名。 而不是返回www.ripcode.com,而是返回了intermedia.net
我正在尝试在 Google App Engine - Python 中使用 gethostbyaddr。 我有 import socket 然后 class BeatMail(webapp.Reque
我确实是 C 和套接字的初学者。我知道我不应该使用 gethostbyaddr 因为这是为了考试所以我必须使用他们告诉我使用的东西......我在 Linux 机器 (Ubuntu 14.04) 上使
我正在用c语言构建一个多客户端UDP服务器,但是当我尝试从系统连接到我的服务器时,我收到此错误gethostbyaddr上的错误:成功请找到下面的服务器代码。我已经尝试了类似问题的解决方案( geth
我想从主机名中获取 fqdn。我在 Linux 服务器上执行此命令:python -c “导入 sys、套接字;sys.stdout.write(socket.gethostbyaddr('')[0]
我有一个脚本可以从一个文件中读取地址并使用 socket.gethostbyaddr 查找它的主机名,但是这个函数的返回是困惑的并且看起来不正确。 写入目标文件的行是: destfile.write(
#include #include #include int main(int argc, char **argv) { char *ptr = NULL; struct hos
我知道这个问题之前在这里被问过,我阅读了所有答案,但无法自己解决这个问题。这是交易:我必须编写一个程序,它需要一堆互联网地址(例如 google.com、www.root.cz)并打印出正式名称、备用
socket.gethostbyname()当它的参数是一个真正的主机名时效果很好。但是当它是一个不存在的主机时,我会得到 3 秒的超时,然后是 socket.gaierror: [Errno 110
我正在尝试获取有关 IP 地址为 89.249.207.231 的主机的主机信息。我知道它存在,因为当我在浏览器的 url 字段中键入 IP 地址时,它会找到该页面。这是我的 C 代码。 #inclu
我有一个包含 IP 地址的变量。我正在尝试对其进行 nslookup,而不是返回 DNS 名称,我得到 0。我在 Linux 环境中。目标 IP 来自 vector (字符串 dest_ip = ve
如果我要求 gethostbyaddr() 查找 NAT 生成的 IP 地址,例如 192.168.0.4,我应该期望它起作用吗? 背景:我正在家里对一些用于网络环境的控制代码进行测试。有时,此代码会
为什么 gethostbyaddr($_SERVER['REMOTE_ADDR']) 返回一个 IP 地址,而不是它应该返回的计算机名称。它在办公室的 50 台计算机上按预期工作并返回计算机名称。目前
我有一个 Python 脚本来获取 IP 地址列表的主机名。该脚本在我从一台计算机运行时有效,但从另一台计算机运行时相同的脚本返回错误( [Errno 11004] host not found )。
我编写了一个脚本,该脚本遍历“0”网络(192.168.0。*)中的所有本地IP。 我使用socket.gethostbyaddr(ip_modified_by_the_loop_each_time)
我是一名优秀的程序员,十分优秀!