一段Ping测试的代码,不知具体意思解决方案
一段Ping测试的代码,不知具体意思
//以下是一段PIng测试的代码,
Long ll_hICMP
Long ll_RTN
String ls_Message
Ulong aul_IPAddr
IP_OPTION_INFORMATION lstr_IPInfo
ICMP_ECHO_REPLY lstr_ICMPReplay
//打开ICMP句柄
ll_hICMP = IcmpCreateFile()
If ll_hICMP <> 0 Then
ls_Result = ""
ls_Message = " " //???????? 这个有什么用
aul_IPAddr = of_ChangeIPv4ToLong(as_IPaddress) //192.169.5.252
//发送ICMP请求
ll_RTN = IcmpSendEcho (ll_hICMP, aul_IPAddr, ls_Message, Len(ls_Message), 0, lstr_ICMPReplay, 282, 200)
//???????关键是这里不懂,这几个参数都是什么作用,这个Len(ls_Message) 有什么用处,还有能不能用这段代码实现 Ping 2000 的包。
//判断回应状态
If ll_RTN > 0 Then
ls_Result = "Ping 成功,状态值为:" + String(lstr_ICMPReplay.Status)
Else
ls_Result = "Ping 失败,错误号为:" + String(WSAGetLastError())
End If
//关闭ICMP句柄
IcmpCloseHandle(ll_hICMP)
Return ll_RTN
Else
ls_Result = "无法打开ICMP句柄!"
Return -1;
End If
------解决方案--------------------
同有仔细研究过
函数详细说明:http://msdn.microsoft.com/en-us/library/Aa366051
IcmpSendEcho2的原型如下:
DWORD IcmpSendEcho2(
HANDLE IcmpHandle,
HANDLE Event,
FARPROC ApcRoutine,
PVOID ApcContext,
IPAddr DestinationAddress,
LPVOID RequestData,
WORD RequestSize,
PIP_OPTION_INFORMATION RequestOptions,
LPVOID ReplyBuffer,
DWORD ReplySize,
DWORD Timeout
);
其中3个参数为结构体:
1 DestinationAddress
[in] Destination of the echo request, in the form of an IPAddr structure.
typedef struct {
union {
struct {
u_char s_b1,s_b2,s_b3,s_b4;
} S_un_b;
struct {
u_short s_w1,s_w2;
} S_un_w;
u_long S_addr;
} S_un;
} IPAddr;
这个不用理它,不管它怎么折腾,固定占四个字节,定义为long
2 RequestOptions
[in] Pointer to the IP header options for the request, in the form of an IP_OPTION_INFORMATION structure.
这个定义为:
Type IP_OPTION_INFORMATION
Ttl As Byte 'Time To Live
Tos As Byte ' Type Of Service
Flags As Byte 'IP header flags
OptionsSize As Byte ' Size in bytes of options data
OptionsData As Long ' Pointer to options data
End Type
3 ReplyBuffer
[out] Buffer to hold any replies to the request. Upon return, the buffer contains an array of ICMP_ECHO_REPLY structures followed by options and data. The buffer must be large enough to hold at least one ICMP_ECHO_REPLY structure. It must be large enough to also hold 9 more bytes of data.
这个定义为:
Type ICMP_ECHO_REPLY
Address As Long 'Replying address
Status As Long 'Reply IP_STATUS
RoundTripTime As Long 'RTT in milliseconds
DataSize As Integer 'Reply data size in bytes
Reserved As Integer 'Reserved for system use
DataPointer As Long 'Pointer to the reply data
Options As IP_OPTION_INFORMATION 'Reply options
//以下是一段PIng测试的代码,
Long ll_hICMP
Long ll_RTN
String ls_Message
Ulong aul_IPAddr
IP_OPTION_INFORMATION lstr_IPInfo
ICMP_ECHO_REPLY lstr_ICMPReplay
//打开ICMP句柄
ll_hICMP = IcmpCreateFile()
If ll_hICMP <> 0 Then
ls_Result = ""
ls_Message = " " //???????? 这个有什么用
aul_IPAddr = of_ChangeIPv4ToLong(as_IPaddress) //192.169.5.252
//发送ICMP请求
ll_RTN = IcmpSendEcho (ll_hICMP, aul_IPAddr, ls_Message, Len(ls_Message), 0, lstr_ICMPReplay, 282, 200)
//???????关键是这里不懂,这几个参数都是什么作用,这个Len(ls_Message) 有什么用处,还有能不能用这段代码实现 Ping 2000 的包。
//判断回应状态
If ll_RTN > 0 Then
ls_Result = "Ping 成功,状态值为:" + String(lstr_ICMPReplay.Status)
Else
ls_Result = "Ping 失败,错误号为:" + String(WSAGetLastError())
End If
//关闭ICMP句柄
IcmpCloseHandle(ll_hICMP)
Return ll_RTN
Else
ls_Result = "无法打开ICMP句柄!"
Return -1;
End If
------解决方案--------------------
同有仔细研究过
函数详细说明:http://msdn.microsoft.com/en-us/library/Aa366051
IcmpSendEcho2的原型如下:
DWORD IcmpSendEcho2(
HANDLE IcmpHandle,
HANDLE Event,
FARPROC ApcRoutine,
PVOID ApcContext,
IPAddr DestinationAddress,
LPVOID RequestData,
WORD RequestSize,
PIP_OPTION_INFORMATION RequestOptions,
LPVOID ReplyBuffer,
DWORD ReplySize,
DWORD Timeout
);
其中3个参数为结构体:
1 DestinationAddress
[in] Destination of the echo request, in the form of an IPAddr structure.
typedef struct {
union {
struct {
u_char s_b1,s_b2,s_b3,s_b4;
} S_un_b;
struct {
u_short s_w1,s_w2;
} S_un_w;
u_long S_addr;
} S_un;
} IPAddr;
这个不用理它,不管它怎么折腾,固定占四个字节,定义为long
2 RequestOptions
[in] Pointer to the IP header options for the request, in the form of an IP_OPTION_INFORMATION structure.
这个定义为:
Type IP_OPTION_INFORMATION
Ttl As Byte 'Time To Live
Tos As Byte ' Type Of Service
Flags As Byte 'IP header flags
OptionsSize As Byte ' Size in bytes of options data
OptionsData As Long ' Pointer to options data
End Type
3 ReplyBuffer
[out] Buffer to hold any replies to the request. Upon return, the buffer contains an array of ICMP_ECHO_REPLY structures followed by options and data. The buffer must be large enough to hold at least one ICMP_ECHO_REPLY structure. It must be large enough to also hold 9 more bytes of data.
这个定义为:
Type ICMP_ECHO_REPLY
Address As Long 'Replying address
Status As Long 'Reply IP_STATUS
RoundTripTime As Long 'RTT in milliseconds
DataSize As Integer 'Reply data size in bytes
Reserved As Integer 'Reserved for system use
DataPointer As Long 'Pointer to the reply data
Options As IP_OPTION_INFORMATION 'Reply options