Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Explicit On
- Imports System.IO
- Imports System.Net
- Imports System.Net.Sockets
- Public Class Form1
- Dim _socket As Socket
- Dim bindEndpoint As IPEndPoint
- Private byteData As Byte() = New Byte(4095) {}
- Dim bContinueCapturing As Boolean = False
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- bContinueCapturing = True
- '_socket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, New AsyncCallback(AddressOf OnReceive), Nothing)
- End Sub
- Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
- _socket.Close()
- End Sub
- Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
- _socket = New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP)
- bindEndpoint = New IPEndPoint(IPAddress.Parse(Dns.GetHostByName(Dns.GetHostName).AddressList(0).ToString), 0)
- _socket.Bind(bindEndpoint)
- _socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, True)
- Dim byTrue As Byte() = New Byte(3) {1, 0, 0, 0}
- Dim byOut As Byte() = New Byte(3) {1, 0, 0, 0}
- _socket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut)
- End Sub
- Private Sub OnReceive(ByVal ar As IAsyncResult)
- Try
- If bContinueCapturing Then
- Dim nReceived As Integer = _socket.EndReceive(ar)
- ParseData(byteData, nReceived)
- byteData = New Byte(4095) {}
- _socket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, New AsyncCallback(AddressOf OnReceive), Nothing)
- End If
- Catch ex As ObjectDisposedException
- Trace.WriteLine("OnReceive->ObjectDisposedException: " & ex.Message)
- Catch ex As Exception
- Trace.WriteLine("OnReceive->Exception: " & ex.Message)
- End Try
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- bContinueCapturing = False
- End Sub
- Private Sub ParseData(ByVal byteData As Byte(), ByVal nReceived As Integer)
- Dim ipHeader As New IPHeader(byteData, nReceived)
- Trace.WriteLine(ipHeader.SourceAddress.ToString & " => " & ipHeader.DestinationAddress.ToString)
- Select Case ipHeader.ProtocolType
- Case Protocol.TCP
- Dim tcpHeader As New TCPHeader(ipHeader.Data, ipHeader.MessageLength)
- If tcpHeader.DestinationPort = "53" OrElse tcpHeader.SourcePort = "53" Then
- Dim dnsHeader As New DNSHeader(tcpHeader.Data, tcpHeader.MessageLength)
- ' DNS
- End If
- Case Protocol.UDP
- Dim udpHeader As New UDPHeader(ipHeader.Data, CInt(ipHeader.MessageLength))
- If udpHeader.DestinationPort = "53" OrElse udpHeader.SourcePort = "53" Then
- ' DNS
- Dim dnsHeader As New DNSHeader(udpHeader.Data, udpHeader.Length)
- End If
- Case Protocol.Unknown
- ' TODO
- End Select
- End Sub
- Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
- Dim encoding As New System.Text.UTF8Encoding()
- _socket.SendTo(encoding.GetBytes("abcabcabc"), bindEndpoint)
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement