BCB6扫描一段网络的IP地址是否存在?

lingbin 2002-07-31 09:44:44
我想扫描一段网络的固定一段的网络地一段地址,也就是看那个机子是否开机,如果开机的话就显示它的IP地址,我要源码,谢谢.
...全文
88 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Friecin 2002-11-02
  • 打赏
  • 举报
回复
看看这个对你有没有帮助:

在Windows系统中,我们经常用Ping.exe来测试网络的连通性。
  Ping的实现过程很简单,该命令将引发IP层发送一个简单的IP包,一般是32字节。而目的方收到这个包后,将源地址和目的地址变换一下,重新发送这个包即可,当然还要加一些超时机制。

  其实,我们也可用C++ Builder NetMaster中的NMEcho控件来实现网络连接检测功能。

  首先定义以下控件:

  三个Edit控件:一个用于接收远程主机的IP地址或域名,一个用于接收用户设置的超时机制的时间,一个用于设置端口号。

  两个RichEdit控件:一个用于给远程主机发送信息,一个用于接收来自远程主机的信息。   两个CheckBox控件:用于用户是否自己设定端口号。

  一个Button控件:用于执行测试。

  一个StatusBar控件:用于显示应用程序的状态。

  程序实现代码如下:

  void __fastcall TForm1::Button1Click(TObject Sender)

  { //设置NMEcho控件的标准TCP/IP属性

   NMEcho1-〉Host=Edit1-〉Text ;

   NMEcho1-〉TimeOut=StrToInt(Edit2-〉Text) ;

   if(CheckBox1-〉Checked)

     NMEcho1-〉Port=StrToInt(Edit3-〉Text);

   else

     NMEcho1-〉Port=7;

  //TCP/IP中Echo的默认端口号

  NMEcho1-〉ReportLevel=Status_Basic;

   NMEcho1-〉Connect(); //建立连接

   RichEdit2-〉Clear ();

   for(int i=0;i
  //RichEdit1用于给远程主机发送信息

  RichEdit2-〉Text=RichEdit2-〉Text +NMEcho1-〉Echo(RichEdit1-〉Lines-〉

  Strings[i]);

   NMEcho1-〉Disconnect ();

  }

  注意:在调用NMEcho控件的Connect()方法时,应该确保在接收数据之前连接已经建立。

  当调用Connect()方法后,如果用户输入的是域地址而不是IP地址,且域名服务器成功地解析了这个域名,将触发控件的OnHostResoved事件,在此事件的处理中,我们将解析成功的消息在状态栏中显示给用户。具体实现代码如下:

  void __fastcall TForm1::NMEcho1HostResolved(TComponent Sender)

  {

   StatusBar1-〉Panels-〉Items[0]-〉Text="Host Resolved!";    

  }

  如果用户输入的远程主机不正确,将触发控件的OnInvalidHost事件,在此事件的处理中,弹出对话框要求用户重新输入远程主机的IP地址或域名地址,然后试图与服务器重建连接。具体代码如下:   void __fastcall TForm1::NMEcho1InvalidHost(bool &&Handled)

  {

   AnsiString s;

   if(InputQuery("Invailid host!","Specify a new host:",s))

   {

     NMEcho1-〉Host=s;

     Handled=true;

   }    

  }

  建立连接后,将触发控件的OnConnect事件,在此事件的处理中,我们将连接成功的消息在状态栏中显示给用户。具体实现代码如下:

  void __fastcall TForm1::NMEcho1Connect(TObject Sender)

  {

   StatusBar1-〉Panels-〉Items[0]-〉Text="Echo has connected host!";

    }

  如果在调用Connect()方法后,在超时时间仍然没有与服务器连接,将触发控件的OnConnectFailed事件,在此事件的处理中,我们将连接失败的消息显示给用户。具体实现代码如下:

  void __fastcall TForm1::NMEcho1ConnectionFailed(TObject Sender)

  {

  ShowMessage("Connection failed!");    

  }

  除了NMEcho控件可以实现以上功能外,NetMaster的NMDayTime、NMTime这两个控件也能实现。方法与NMEcho控件一样,区别是NMDayTime和NMTime这两个控件不用首先调用Connect()方法,它们与服务器的连接是在使用DayTimeStr、TimeStr属性时自动进行的。
meidong 2002-11-01
  • 打赏
  • 举报
回复
扫描本网段的机器采用ARP协议更好,基本上可以说没有任何一台机器会禁用ARP协议的
ccrun.com 2002-10-18
  • 打赏
  • 举报
回复
以前我见过一段Delphi编的扫描局域网主机是否存在的代码,可惜格了硬盘给没了。如果谁能贴上来最好了。
TopCat 2002-09-18
  • 打赏
  • 举报
回复
1. ping对方的机器看有没有回应。ping的代码网上可以找到。不过对方如果关闭了ICMP回应,则无法正确判断。

2. 扫描每台机器的低端端口,一般的机器总是要开至少1个低端端口的,每个机器都扫描一遍,不过太耗资源了。


============================================
★仗剑走江湖 小侠令狐虫★
============================================
lingbin 2002-08-30
  • 打赏
  • 举报
回复
有没有原理啊,就是说它是怎样实现的。
netseek 2002-08-30
  • 打赏
  • 举报
回复
网络主机扫描【HostScan】

添入首地址末地址,按扫描就可意了

最强大的网络扫描软件,具有IP扫描,端口扫描,网络服务扫描功能,

下载地址:http://www.cnetseek.com/gb/hostscan/download/hostscan_gb_127.exe

软件主页:
http://www.cnetseek.com/gb/hostscan/index.html
lingbin 2002-08-03
  • 打赏
  • 举报
回复
这样是不行的用Socket连接你必须在另一台机子上放一个ServerSocket,然后再用ClientSocket来Connect,我是想直接测试连接。
christopher_hp 2002-08-01
  • 打赏
  • 举报
回复
在Socket的Error事件里面加人ErrorCode=0,那么如果你连件的主机不存在的话,就不会抛出异常了,然后的工作就是取出ip地址的最后的数字,让它自加,再做为新的ip去搜索

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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