如何获取指定网段所有存在的IP呢?(编程实现)/N

bomb 2000-02-20 08:28:00
...全文
199 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kingron 2001-05-14
  • 打赏
  • 举报
回复
提问者:如要继续讨论请定期提前贴子,如不想讨论请结束贴子。
Lin 2000-02-21
  • 打赏
  • 举报
回复
做一个循环:
procedure TForm1.FormCreate(Sender: TObject);
var
phe : PHostEnt;
Buffer : array [0..255] of char;
GInitData : TWSADATA;
nLoop: Integer;
begin
WSAStartup($101, GInitData);
for nLoop := xx to yy do //网段xx~yy
begin
Buffer:= Chr(x) + Chr(y) + Chr(z) + Chr(nLoop) + Chr(0);
//x,y,z为网段地址的前三字节的整数数值
phe:= GetHostByAddr(@Buffer, Length(Buffer), PF_INET);
if phe <> nil then //如果对方主机开通且安装TCP/IP的话,则该IP地址存在
MessageBox(Handle, phe^.h_name, '存在', mb_ok);
end;
WSACleanup;
end;
bomb 2000-02-20
  • 打赏
  • 举报
回复
to Firing_Sky :
那么,如何真正做到呢?

我想到的办法只是发送ICMP包进行 ping 10.255.255.255
然后过滤返回结果,您老觉得呢?
radish 2000-02-20
  • 打赏
  • 举报
回复
好的方法我也没有,Firing_Sky提供的方法和WINDOWS的网络邻居一样,不准。
Firing_Sky 2000-02-20
  • 打赏
  • 举报
回复
有几个Api函数可以满足你的要求
WNetOpenEnum

WNetAddConnection
WNetAddConnection2
WNetAddConnection3
WNetCancelConnection
WNetCancelConnection2
WNetCloseEnum
WNetConnectionDialog
WNetConnectionDialog1

WNetDisconnectDialog
WNetDisconnectDialog1

WNetEnumResource
WNetGetConnection
WNetGetLastError
WNetGetNetworkInformation
WNetGetProviderName
WNetGetResourceInformation
WNetGetResourceParent
WNetGetUniversalName
WNetGetUser
WNetOpenEnum
WNetUseConnection
bomb 2000-02-20
  • 打赏
  • 举报
回复
行啊,但是我不想一个一个的ping啊!那样又慢又不好

不过这样行吗?
比如我要获取10.20.XX.XX,我是不是应该ping 10.2.255.255呢?
然后我是接受返回消息,还是使用arp -a 获取呢?
radish 2000-02-20
  • 打赏
  • 举报
回复
用程序PING不行吗?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧