加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB6 基于API的远程开机代码

发布时间:2020-12-17 07:37:20 所属栏目:百科 来源:网络整理
导读:利用Magic Packet实现的远程开机代码 调用示例: MagicPacket “192.168.1.100:54321” "A1-B2-C3-D4-E5-F6" Private Const WSA_DescriptionLen = 256Private Const WSA_DescriptionSize = WSA_DescriptionLen + 1Private Const WSA_SYS_STATUS_LEN = 128Priv
利用Magic Packet实现的远程开机代码
调用示例:
MagicPacket “192.168.1.100:54321” "A1-B2-C3-D4-E5-F6"
Private Const WSA_DescriptionLen = 256
Private Const WSA_DescriptionSize = WSA_DescriptionLen + 1
Private Const WSA_SYS_STATUS_LEN = 128
Private Const WSA_SysStatusSize = WSA_SYS_STATUS_LEN + 1

Private Const INVALID_SOCKET = -1
Private Const SOCKET_ERROR = -1

Private Const AF_INET = 2
Private Const SOCK_DGRAM = 2
Private Const IPPROTO_UDP = 17


Private Type HostEnt
    hName As Long
    hAliases As Long
    hAddrType As Integer
    hLength As Integer
    hAddrList As Long
End Type

Private Type SockAddr
    Sin_Family As Integer
    Sin_Port As Integer
    Sin_Addr As Long
    Sin_Zero(7) As Byte
End Type

Private Type WSADataType
    wVersion As Integer
    wHighVersion As Integer
    szDescription As String * WSA_DescriptionSize
    szSystemStatus As String * WSA_SysStatusSize
    iMaxSockets As Integer
    iMaxUdpDg As Integer
    lpVendorInfo As Long
End Type

Private Declare Function CloseSocket Lib "ws2_32.dll" Alias "closesocket" (ByVal hSocket As Long) As Long
Private Declare Function Conn Lib "ws2_32.dll" Alias "connect" (ByVal hSocket As Long,Addr As SockAddr,ByVal NameLen As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any,Source As Any,ByVal Length As Long)
Private Declare Function GetHostByName Lib "ws2_32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long
Private Declare Function Htons Lib "ws2_32.dll" Alias "htons" (ByVal HostShort As Integer) As Integer
Private Declare Function iNet_Addr Lib "wsock32.dll" Alias "inet_addr" (ByVal S As String) As Long
Private Declare Function Send Lib "ws2_32.dll" Alias "send" (ByVal hSocket As Long,Buf As Any,ByVal BufLen As Long,ByVal Flags As Long) As Long
Private Declare Function Socket Lib "ws2_32.dll" Alias "socket" (ByVal af As Long,ByVal sType As Long,ByVal Protocol As Long) As Long
Private Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Private Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVR As Long,lpWSAD As WSADataType) As Long

Public Sub MagicPacket(ByVal Host As String,ByVal MAC As String)
    Dim WSAData As WSADataType,SA As SockAddr,hHost As HostEnt
    Dim hSocket As Long,Port As Long,R As Long,I As Integer,Data() As Byte
    
    If WSAStartup(&H202,WSAData) <> 0 Then
        WSACleanup
        Exit Sub
    End If
    
    Port = 9 '当不输入端口号时,默认端口号为9
    If (InStr(Host,":") > 0) Then
        If IsNumeric(Right(Host,Len(Host) - InStr(Host,":"))) = True Then Port = CLng(Right(Host,":")))
        Host = Left(Host,InStr(Host,":") - 1)
    End If
    
    hSocket = Socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)
    SA.Sin_Family = AF_INET
    SA.Sin_Port = Htons(CInt("&H" & Hex(Port)))
    SA.Sin_Addr = iNet_Addr(Host)
    If SA.Sin_Addr = INVALID_SOCKET Then
        R = GetHostByName(Host)
        If R <> 0 Then
            CopyMemory hHost,ByVal R,LenB(hHost)
            CopyMemory R,ByVal hHost.hAddrList,LenB(R)
            CopyMemory SA.Sin_Addr,hHost.hLength
        End If
    End If
    If Conn(hSocket,SA,LenB(SA)) = SOCKET_ERROR Then
        WSACleanup
        Exit Sub
    End If
    
    MAC = Replace(MAC,"-","")
    MAC = Replace(MAC,":","")
    
    ReDim Data(101)
    For I = 0 To 5
        Data(I) = &HFF
    Next
    For I = 0 To 15
        Data((I + 1) * 6) = CByte("&H" & Mid(MAC,1,2))
        Data((I + 1) * 6 + 1) = CByte("&H" & Mid(MAC,3,2))
        Data((I + 1) * 6 + 2) = CByte("&H" & Mid(MAC,5,2))
        Data((I + 1) * 6 + 3) = CByte("&H" & Mid(MAC,7,2))
        Data((I + 1) * 6 + 4) = CByte("&H" & Mid(MAC,9,2))
        Data((I + 1) * 6 + 5) = CByte("&H" & Mid(MAC,11,2))
    Next
    Send hSocket,Data(0),UBound(Data) + 1,0
    CloseSocket hSocket
End Sub

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读