2015-09-24 3 views
1

Я могу послать пакет с этим:Может отправлять обычный UDP-пакет с VB.net - Но как вы отправляете WOL-пакет?

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 (который я печатаю в/слово поле адреса).

Я понимаю, что для WOL (для чего у меня есть работа, просто хочу сделать свое приложение для удовольствия/опыта) вам нужен MAC, просто он добавит MAC-адрес, сделав его WOL-пакетом или это сложнее?

ПРИМЕЧАНИЕ: Я вижу разницу в WOL и UDP-пакетах в Wireshark и меняю свой 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

EDIT: я играл около МНОГО с некоторыми примерами, но они не являются лучшими.

ответ

1

Мне удалось это сделать через несколько часов. Если кто-то еще застрял, вот как я это сделал:

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 в соответствии с вашими потребностями. Или, если вам нужно, вы можете добавить в текстовые поля для разных входов.

Смежные вопросы