欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于一个用VB编写的PING工具的问题 多线程vbvbavb.net 

程序员文章站 2022-07-05 21:31:33
...
我在互联网上找到一个用VB编写的程序,是PING一个计算机的IP是否能通的工具,我改了改,使用ADO重数据库中循环读取IP地址,并将测试后的状态写入到数据库,作完后运行是可以测试,但是速度太慢了,每循环测试一个IP地址都需要接近1秒的时间,如果IP多的话时间就太长了,有其他办法让测试时间缩短吗?多线程如何做呢?谢谢各位帮忙!!!

VB代码:
Option Explicit
Private Const WS_VERSION_REQD As Long = &H101
Private Const INADDR_NONE As Long = &HFFFFFFFF
Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128
Private Const PING_TIMEOUT As Long = 500

Private Type ICMP_OPTIONS
  Ttl As Byte
  Tos As Byte
  Flags As Byte
  OptionsSize As Byte
  OptionsData As Long
End Type

Private Type ICMP_ECHO_REPLY
  Address As Long
  status As Long
  RoundTripTime As Long
  DataSize As Long
  DataPointer As Long
  Data As String * 250
End Type
Private Type WSADATA
  wVersion As Integer
  wHighVersion As Integer
  szDescription(0 To MAX_WSADescription) As Byte
  szSystemStatus(0 To MAX_WSASYSStatus) As Byte
  wMaxSockets As Long
  wMaxUDPDG As Long
  dwVendorInfo As Long
End Type

Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long

Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long
  
Private Declare Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, _
  ByVal DestinationAddress As Long, ByVal RequestData As String, ByVal RequestSize As Long, _
  ByVal RequestOptions As Long, ReplyBuffer As ICMP_ECHO_REPLY, ByVal ReplySize As Long, _
  ByVal Timeout As Long) As Long
  
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, _
  lpWSADATA As WSADATA) As Long
  
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long

Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, _
  ByVal dwHostLen As Long) As Long
  
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
  (xDest As Any, xSource As Any, ByVal nbytes As Long)
  
Private Declare Function inet_addr Lib "WSOCK32.DLL" (ByVal s As String) As Long
  
Private Sub Command1_Click() 'ping网络计算机
  Dim ECHO As ICMP_ECHO_REPLY
  Dim pos As Long
  Dim success As Long
  Dim WSAD As WSADATA
  Dim aa As Boolean
  Dim mystr As String
  Dim Cn As New ADODB.Connection
  Dim Re As New ADODB.Recordset
  Dim SqlStr As String
  Dim Numb As Long
  Set Cn = New ADODB.Connection
  Set Re = New ADODB.Recordset
  Cn.Open "Provider=Microsoft.jet.OLEDb.4.0;Data Source=F:\icmp device manager\db\ipdb.mdb"
  Re.CursorLocation = adUseClient
  SqlStr = "select * from ip_table "
  Re.Open SqlStr, Cn, adOpenStatic, adLockOptimistic
  Numb = Re.RecordCount
  While Numb <> 0
  aa = WSAStartup(WS_VERSION_REQD, WSAD) = 0
  If aa Then
  Dim hPort As Long
  mystr = inet_addr(Re("ipaddress").Value)
  If mystr <> INADDR_NONE Then
  hPort = IcmpCreateFile()
  If hPort Then
  Call IcmpSendEcho(hPort, mystr, Text1.Text, Len(Text1.Text), _
  0, ECHO, Len(ECHO), PING_TIMEOUT) '发送回响请求报文,返回回响应答报文
  Call IcmpCloseHandle(hPort)
  End If
  If ECHO.status = 0 Then
  Re("status").Value = "1"
  Re.Update
  Else
  Re("status").Value = "0"
  Re.Update
  End If
  End If
  End If
  Re.MoveNext
  Numb = Numb - 1
  Wend
  Re.Close
  Text2.Text = "完成"
End Sub
VB对多线程支持很差可以考虑用VB.NET来做做看我是初学者,很多东西都不会呀用activeX exe什么意思?3楼正解.
VB里新建一个ACTIVE X控件工程.
然后将要PING的地址设为控件属性,PING的动作做为方法.
然后再添加一个工程(变成一个工程组),在新工程中添加刚才的ACTIVEX控件.
通过控件数组的方法来实现同时PING多个IP地址,这样就可以提高PING的速度了.
我前个星期正好写了这么一个小东西,大概同时加载20个控件同时发送64K的数据包,基本就能占用30-40M的上行带宽了.
用来阻塞网络确实是不错.但是不知是VB程序处理能力的限制还是网卡本身的限制,即使再增加控件数组的加载数量,也很难将流量提高了.因此,想要用这种方法来做DOS攻击的话,还需要有一台或多台CPU比较强劲的电脑和一个带宽很高的网络接入回头看了看楼主的原帖,我猜想可能是要写一个网络连接监控的程序:
在数据库里面保存着所有服务器和网络设备的IP地址,然后定时PING一下,看看是否出于连接状态.
如果是的话,我原来也写过这样的程序,也遇到过楼主同样的问题.最近整理硬盘的时候找出来了,改着改着就成了上面的东西了,呵呵.其实可以直接 调用 DOS 的 ping命令我不是做DOS攻击,我是用来管理IP协议设备用的还是不明白你说的方法,可以详细点吗?上去具体方法就是把PING的动作封装成ACTIVEX控件,然后用控件数组的方法去调用它,以达到同时PING多个IP的目的天极的BLOG系统也是问题多多,附件死活传不上去。否则就给你看例子了唉··大哥,我还是不明白,你留个QQ号码好吗?我QQ号码:9740806,谢谢你指导我一下亚,谢谢啦大哥不管我了吗?


pciture图片操作,验证码识别?

WINSOCK文件传输问题

text文本显示数字的问题!

VBA   excel简单应用,新手求源代码,有效便散分---在一批10万个物料中筛选出其中的3000个左右的坏件?(坏件有唯一物料编码,且已知)

usb接口的   zebro证卡打印p330i的编程问题

VB中如何样获取鼠标选取的文本,类似于划词的方法

VB6.0能通过命令修改注册表么?

一个基础的问题   看你会不   呵  

问一问题   比较基础的问题   看你会不   呵

COM+通信中的权限问题

VB中生成条型码有什么控件啊?急急急!!!谢谢,最好有具体的例程!

100分   xmlhttp   模拟IE实现自动登录网站问题

我本来想用wmp控件做播放器,但遇到问题

timer   控件内执行多函数的问题

Open   App.Path   &      在当前程序下生成文件夹具体进来看看

又是Winsock的问题

请教关于字符串操作问题

如何通过Navigate在VB里打开需要登录的网页?

关于Treeview的选择问题

如何让属性有自已的方法

如何获得影射盘符



TDBGrid输入问题

VB打开窗口后关闭时返回值问题

问一个adodcr的bookmark的问题

如何创建excle文件

有人出现过我这种问题吗??要疯了....

关于一个用VB编写的PING工具的问题

关于一个用VB编写的PING工具的问题

关于数组的问题!有点想不通啊~~

网页文本框自动输入的问题  

如何在Mschart上显示数值?

读写文件

读写文件

谁能给个关于拦截键盘和鼠标的vb代码或资料

大家帮我解决一下这个问题吧

请教如何保存电脑上所有文件类型的图标

求助!关于picturebox加载大型图片的问题

可以将VB自带控件XP化的winxpc   engine控件,有点小BUG,希望高手修改一下使之完美

高手进来,看一下,用图片做皮肤窗体问题

请各位看一下我的一个系统的两个界面

listview控件填充表格错误,求如何解决方法

进程的启动和关闭

为什么我在记事本里输入\\却变成了##,在cmd中也一样。

Mschart控件的使用????

求教关于程序退出码

如何向文本中添加数据而不是覆盖   ?

高分求用hook任务管理器的API方法,隐藏进程的代码

VB能实现这样的功能吗?

请教一个我无头绪的问题   谢谢!

请教一个我认为很难的问题   谢谢

关于Winsock的问题

sql   server   海量数据库中修改记录时产生“超时已过期”的错误!

VB   PaintPicture画窗体问题,不知道要如何搞????

如何用ado   读取   DBF   数据库中的逻辑删除记录?

讨论CSDN新版论坛的缺陷

TIOBE排名中的(Visual)   Basic是VB6还是VB2005呢?

会员软件源代码!!!!

获取来电号码

谁做过医院系统的   请进   有单做!!!

如何在vista下取得硬盘序列号?

关于获取其它窗口的信息

请问DBGrid   如何绑定?

大字符串处理

关于播放asf影片的问题

如何用VB判断是否插入U盘

请好心的大侠帮忙:如何在SQL库新建一个受限用户?

请问如何获取网页的公网ip

VB,DataGrid多选的内容用DataReport打印

如何在新的webbrowser開始frameset中的某一個frame?(vb2005)

请教:关于outlook2003的删除机制

用Visual   Basic   6.0   如何调用扫描仪   Twain.dll

如何将存储于数据库中的图片不生成图片文件而显于于界面?

有VB做过打印的人来看看,帮我解决问题,捆饶很久了,始终解决不了!

如何取得远程用户在其局域网中的IP地址

使用ADODB.Stream将图片存入数据库时如何进行加密?

查询某个表的关键字!

如何打包成免安装的可执行文件

有关VB编程问题

treeview按下ctrl或shift键能进行多选

   WritePrivateProfileString写入公共变量public的时候为什么提示类型不匹配?

电路板电压测试系统,那位用VB有写过??

我用user1登陆,如何让打开一个文件时以user2(密码已知)身份运行?

请问在设定TEXTBOX属性的时候能否将FONTS中的GB2312改成其他的如GBK字符集?

通用存儲程序及顯示程序

vb   gps连接问题求助!

新手注意:VB与数据库连接必做工作

在VB   中应该如何引用Crystal   ActiveX控件

为何我关闭不了excel进程。quit和set   nothing没用?

vb6   OLE控件中文件如何保存?

字符串替换的问题,出现乱码

设置timer   居然   内存溢出

急救,数据库连接问题,在线等!!

请教一个人事出勤档案处理的问题,急!!!!!!!!!!!!!!!

MshFlexGrid关于手工录入数据,增行,删行,输出,等问题

不同文件间具有相同ID的几个数两两相减如何解决?

判断字符串是否合法

求购稳定的即时通讯客户端软件

求购稳定的即时通讯客户端软件

求教!一个VBA   程序在office2007运行中断,在office2003下正常。     

更多vb开发资料,请访问http://www.vbbaike.com/