可以用 VB.net 发送正常的 UDP 数据包 - 但是你如何发送 WOL 数据包?
Can send normal UDP packet with VB.net - But how do you send a WOL packet?
我可以用这个发送数据包:
Public Class Form1
Dim publisher As New Sockets.UdpClient(0)
Dim subscriber As New Sockets.UdpClient(2000)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
publisher.Connect(TBTo.Text, TBPort.Text)
Dim sendbytes() As Byte = ASCII.GetBytes("test")
publisher.Send(sendbytes, sendbytes.Length)
End Sub
End Class
效果很好,使用 WireShark 我可以在端口 9 上看到一个 UDP 数据包发送到我的 IP(我在 address/word 框中输入)。
我了解 WOL(我确实在工作,只是想为 fun/experience 提出自己的申请)您需要一个 MAC,它只是 "adding a MAC" 地址吗使它成为一个 WOL 数据包还是比这更复杂?
注意: 我可以看到 Wireshark 中 WOL 和 UDP 数据包的区别,并将我的 IP 更改为 "MYIP"。例如下面是从 WOL 应用程序发送的 WOL 数据包。
40.000203000 MYIP 192.168.1.1 WOL 144 MagicPacket for Micro-St_21:94:b6 (44:8a:5b:21:94:b6)
与普通UDP数据包相比:
69 12170.303276000 192.168.1.1 MYIP UDP 46 Source port: 57465 Destination port: 9
编辑:
我玩过很多例子,但它们不是最好的。
我几个小时后就成功了。如果其他人卡住了,我是这样做的:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim MacAddress As String = "YOUR MAC ADDRESS HERE"
Dim myAddress As String = "YOURIP HERE"
Dim udpClient As New System.Net.Sockets.UdpClient
Dim buf(101) As Char
Dim sendBytes As [Byte]() = System.Text.Encoding.ASCII.GetBytes(buf)
For x As Integer = 0 To 5
sendBytes(x) = CByte("&HFF")
Next
Dim i As Integer = 6
For x As Integer = 1 To 16
sendBytes(i) = CByte("&H" + MacAddress.Substring(0, 2))
sendBytes(i + 1) = CByte("&H" + MacAddress.Substring(2, 2))
sendBytes(i + 2) = CByte("&H" + MacAddress.Substring(4, 2))
sendBytes(i + 3) = CByte("&H" + MacAddress.Substring(6, 2))
sendBytes(i + 4) = CByte("&H" + MacAddress.Substring(8, 2))
sendBytes(i + 5) = CByte("&H" + MacAddress.Substring(10, 2))
i += 6
Next
udpClient.Send(sendBytes, sendBytes.Length, myAddress, 9)
End Sub
End Class
就是这样。然后你所做的就是更改你的 IP 和 MAC 以满足你的需要。或者,如果需要,您可以为不同的输入添加文本框。
我可以用这个发送数据包:
Public Class Form1
Dim publisher As New Sockets.UdpClient(0)
Dim subscriber As New Sockets.UdpClient(2000)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
publisher.Connect(TBTo.Text, TBPort.Text)
Dim sendbytes() As Byte = ASCII.GetBytes("test")
publisher.Send(sendbytes, sendbytes.Length)
End Sub
End Class
效果很好,使用 WireShark 我可以在端口 9 上看到一个 UDP 数据包发送到我的 IP(我在 address/word 框中输入)。
我了解 WOL(我确实在工作,只是想为 fun/experience 提出自己的申请)您需要一个 MAC,它只是 "adding a MAC" 地址吗使它成为一个 WOL 数据包还是比这更复杂?
注意: 我可以看到 Wireshark 中 WOL 和 UDP 数据包的区别,并将我的 IP 更改为 "MYIP"。例如下面是从 WOL 应用程序发送的 WOL 数据包。
40.000203000 MYIP 192.168.1.1 WOL 144 MagicPacket for Micro-St_21:94:b6 (44:8a:5b:21:94:b6)
与普通UDP数据包相比:
69 12170.303276000 192.168.1.1 MYIP UDP 46 Source port: 57465 Destination port: 9
编辑: 我玩过很多例子,但它们不是最好的。
我几个小时后就成功了。如果其他人卡住了,我是这样做的:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim MacAddress As String = "YOUR MAC ADDRESS HERE"
Dim myAddress As String = "YOURIP HERE"
Dim udpClient As New System.Net.Sockets.UdpClient
Dim buf(101) As Char
Dim sendBytes As [Byte]() = System.Text.Encoding.ASCII.GetBytes(buf)
For x As Integer = 0 To 5
sendBytes(x) = CByte("&HFF")
Next
Dim i As Integer = 6
For x As Integer = 1 To 16
sendBytes(i) = CByte("&H" + MacAddress.Substring(0, 2))
sendBytes(i + 1) = CByte("&H" + MacAddress.Substring(2, 2))
sendBytes(i + 2) = CByte("&H" + MacAddress.Substring(4, 2))
sendBytes(i + 3) = CByte("&H" + MacAddress.Substring(6, 2))
sendBytes(i + 4) = CByte("&H" + MacAddress.Substring(8, 2))
sendBytes(i + 5) = CByte("&H" + MacAddress.Substring(10, 2))
i += 6
Next
udpClient.Send(sendBytes, sendBytes.Length, myAddress, 9)
End Sub
End Class
就是这样。然后你所做的就是更改你的 IP 和 MAC 以满足你的需要。或者,如果需要,您可以为不同的输入添加文本框。