pb通过icmp.dll实现ping功能
来源:互联网 发布:咨询数据分析 编辑:程序博客网 时间:2024/06/08 01:09
第一步:定义实例变量
//{ping 一个值
Private constant Long IP_SUCCESS = 0
Private constant long IP_STATUS_BASE = 11000
Private constant long IP_BUF_TOO_SMALL = (11000 + 1)
Private constant long IP_DEST_NET_UNREACHABLE = (11000 + 2)
Private constant long IP_DEST_HOST_UNREACHABLE = (11000 + 3)
Private constant long IP_DEST_PROT_UNREACHABLE = (11000 + 4)
Private constant long IP_DEST_PORT_UNREACHABLE = (11000 + 5)
Private constant long IP_NO_RESOURCES = (11000 + 6)
Private constant long IP_BAD_OPTION = (11000 + 7)
Private constant long IP_HW_ERROR = (11000 + 8)
Private constant long IP_PACKET_TOO_BIG = (11000 + 9)
Private constant long IP_REQ_TIMED_OUT = (11000 + 10)
Private constant long IP_BAD_REQ = (11000 + 11)
Private constant long IP_BAD_ROUTE = (11000 + 12)
Private constant long IP_TTL_EXPIRED_TRANSIT = (11000 + 13)
Private constant long IP_TTL_EXPIRED_REASSEM = (11000 + 14)
Private constant long IP_PARAM_PROBLEM = (11000 + 15)
Private constant long IP_SOURCE_QUENCH = (11000 + 16)
Private constant long IP_OPTION_TOO_BIG = (11000 + 17)
Private constant long IP_BAD_DESTINATION = (11000 + 18)
Private constant long IP_ADDR_DELETED = (11000 + 19)
Private constant long IP_SPEC_MTU_CHANGE = (11000 + 20)
Private constant long IP_MTU_CHANGE = (11000 + 21)
Private constant long IP_UNLOAD = (11000 + 22)
Private constant long IP_ADDR_ADDED = (11000 + 23)
Private constant long IP_GENERAL_FAILURE = (11000 + 50)
Private constant long MAX_IP_STATUS = (11000 + 50)
Private constant long IP_PENDING = (11000 + 255)
Private constant long PING_TIMEOUT = 500
Private constant long WS_VERSION_REQD = 101
Private constant long MIN_SOCKETS_REQD = 1
Private constant long SOCKET_ERROR = -1
Private constant long INADDR_NONE = 4294967295
Private constant long MAX_WSADescription = 256
Private constant long MAX_WSASYSStatus = 128
//}
第二步:定义全局函数
Function ulong IcmpCreateFile () Library "icmp.dll"
Function long IcmpSendEcho (ulong IcmpHandle, ulong DestinationAddress, string RequestData,long RequestSize, long RequestOptions, Ref icmp_echo_reply ReplyBuffer, long ReplySize, long Timeout ) Library "icmp.dll" Alias for "IcmpSendEcho"
Function long IcmpCloseHandle (ulong IcmpHandle) Library "icmp.dll"
Function ulong inet_addr (string cp) Library "ws2_32.dll" Alias for "inet_addr"
第三步:定义两个相关结构
a)icmp_options结构
character tt1
character tos
character flags
character optionsize
long optiondata
b)icmp_echo_reply
long address
long status
long roundtriptime
long datasize
long reserved
long datapointer
icmp_options options
string{250} data
第四步:书写实现功能函数:boolean w_ping(string ip,string echomsg,ref string msg)
//返回值 ping得通返回true,反之为false,如果为false,可通过形参msg来查看
//
ULong lul_address, lul_handle
Long ll_rc, ll_size
String ls_reply
boolean lb_success = false
icmp_echo_reply lstr_reply
lul_address = inet_addr(as_ipaddress)
If lul_address > 0 Then
lul_handle = IcmpCreateFile()
ll_size = Len(as_echomsg)
ll_rc = IcmpSendEcho(lul_handle,lul_address,as_echomsg,ll_size,0,lstr_reply,278,200)
IcmpCloseHandle(lul_handle)
If ll_rc <> 0 Then
choose case lstr_reply.Status
Case IP_SUCCESS
msg = "ip success"
lb_success = true
Case INADDR_NONE
msg = "inet_addr bad IP format"
Case IP_BUF_TOO_SMALL
msg = "ip buf too_small"
Case IP_DEST_NET_UNREACHABLE
msg = "ip dest net unreachable"
Case IP_DEST_HOST_UNREACHABLE
msg = "ip dest host unreachable"
Case IP_DEST_PROT_UNREACHABLE
msg = "ip dest prot unreachable"
Case IP_DEST_PORT_UNREACHABLE
msg = "ip dest port unreachable"
Case IP_NO_RESOURCES
msg = "ip no resources"
Case IP_BAD_OPTION
msg = "ip bad option"
Case IP_HW_ERROR
msg = "ip hw_error"
Case IP_PACKET_TOO_BIG
msg = "ip packet too_big"
Case IP_REQ_TIMED_OUT
msg = "ip req timed out"
Case IP_BAD_REQ
msg = "ip bad req"
Case IP_BAD_ROUTE
msg = "ip bad route"
Case IP_TTL_EXPIRED_TRANSIT
msg = "ip ttl expired transit"
Case IP_TTL_EXPIRED_REASSEM
msg = "ip ttl expired reassem"
Case IP_PARAM_PROBLEM
msg = "ip param_problem"
Case IP_SOURCE_QUENCH
msg = "ip source quench"
Case IP_OPTION_TOO_BIG
msg = "ip option too_big"
Case IP_BAD_DESTINATION
msg = "ip bad destination"
Case IP_ADDR_DELETED
msg = "ip addr deleted"
Case IP_SPEC_MTU_CHANGE
msg = "ip spec mtu change"
Case IP_MTU_CHANGE
msg = "ip mtu_change"
Case IP_UNLOAD
msg = "ip unload"
Case IP_ADDR_ADDED
msg = "ip addr added"
Case IP_GENERAL_FAILURE
msg = "ip general failure"
Case IP_PENDING
msg = "ip pending"
Case PING_TIMEOUT
msg = "ping timeout"
Case Else
msg = "unknown msg returned"
end choose
// If lstr_reply.Status = 0 Then
// ls_reply = String(lstr_reply.Data)
// If ls_reply = as_echomsg Then
// Return True
// End If
// End If
End If
End If
Return lb_success
////True 表示PING成功,反之失败
//
总结:
其中涉及到 icmp.dll的相关知识,请参考微软的msdn
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecomm5/html/wce50grficmpfunctions.asp
另外本代码参考了国外的vb的代码:
http://vbnet.mvps.org/index.html?code/internet/ping.htm
- pb通过icmp.dll实现ping功能
- ping功能实现(ICMP)
- golang实现icmp中的ping功能
- java实现ICMP协议的ping功能
- ICMP之应用:ping(ICMP.dll)
- ICMP API实现ping
- ICMP 的 Ping 实现
- SOCK_RAW, icmp, ping实现
- Linux用ICMP协议实现简单Ping网络监测功能
- Linux用ICMP协议实现简单Ping网络监测功能
- Linux用ICMP协议实现简单Ping网络监测功能
- ICMP协议之ping实现
- ICMP协议之ping实现
- ICMP协议之ping实现
- ICMP协议之ping实现
- ICMP协议之ping实现
- ICMP协议之ping实现
- php通过类方法实现ping功能
- ActionScript按钮事件
- spring jdbc模板 数据库访问例子
- 技术--oracle维护手册
- 向朋友们请教一个关于USB接口编程的问题
- 持久层与ORMaping
- pb通过icmp.dll实现ping功能
- .NET 2.0中SerialPort类数据接收问题
- java处理oracle的long数据类型
- Velocity用户手册---中文版
- 极限编程的简单思想(转)
- 給資料表加上默認值
- 如果爱,请别用眼泪感动爱情
- 2006年7月6日 工作日记
- 今天看书用ASP.NET做了个聊天室!