modernaesthetics icon

Packet Sniffer/Editor - VB.NET

modernaesthetics | PRO | 06/07/18 05:21:46 PM UTC | 0 ⭐ | 348 👁️ | Never ⏰ | []
VB.NET |

12.48 KB

|

None

|

0 👍

/

0 👎

Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Collections.Generic
 
'Installation:
'-----------------
'1.) Navigate to Windows Control Panel-> Device Manager.
'2.) Select the top most item (ex. Name-PC), right click, and Add Legacy Hardware.
'3.) When prompted choose to install the hardware you select from a list (Advanced).
'4.) Install Network Adapter-> Microsoft-> Microsoft Loopback Adapter.
 
'Configuration:
'-----------------
'1.) Navigate to Windows Control Panel-> Network and Sharing Center.
'2.) Find the option 'Change adapter settings', usually found on the top left.
'3.) Once in Network Connections, right click the Loopback Adapater and choose Properties.
'4.) (Optional) Disable everything but Internet Protocol Version 4 (TCP/IPv4).
'5.) Select Internet Protocol Version 4 and click on Properties.
'6.) Set the IP address to your target ip address and press OK.
 
'Important:
'-----------------
'Disable the adapter when not in use. Follow Configuration steps 1 to 3
'but instead of choosing Properties, click Enable/Disable instead.
 
 
'------------------
'Creator: aeonhack
'Site: elitevs.net
'Created: 7/10/2010
'Changed: 1/15/2012
'Version: 2.0.0
'------------------
Class Carrier
 
    Delegate Sub RecieveDG(ByVal connection As Interceptor, ByVal data As Byte())
    Delegate Sub ConnectionDG(ByVal connection As Interceptor)
    Delegate Sub StateChangeDG()
 
    Public ServerToClient As RecieveDG
    Public ClientToServer As RecieveDG
    Public ConnectEvent As ConnectionDG
    Public DisconnectEvent As ConnectionDG
    Public StateChange As StateChangeDG
 
    Private DisconnectFilter As ConnectionDG
 
    Private Master As Socket
    Private LocalEndPoint As IPEndPoint
    Private RemoteEndPoint As IPEndPoint
 
    Private ConnectionPool As Stack(Of Interceptor)
 
    Private _Connections As Dictionary(Of Guid, Interceptor)
    ReadOnly Property Connections As Dictionary(Of Guid, Interceptor)
        Get
            Return _Connections
        End Get
    End Property
 
    Private _Listening As Boolean
    ReadOnly Property Listening As Boolean
        Get
            Return _Listening
        End Get
    End Property
 
    Sub New()
        _Connections = New Dictionary(Of Guid, Interceptor)
        ConnectionPool = New Stack(Of Interceptor)
 
        ServerToClient = New RecieveDG(AddressOf RecieveHandler)
        ClientToServer = New RecieveDG(AddressOf RecieveHandler)
        ConnectEvent = New ConnectionDG(AddressOf ConnectionHandler)
        DisconnectEvent = New ConnectionDG(AddressOf ConnectionHandler)
        StateChange = New StateChangeDG(AddressOf StateChangeHandler)
 
        DisconnectFilter = New ConnectionDG(AddressOf DisconnectFilterHandler)
    End Sub
 
#Region " Handlers "
    Private Sub RecieveHandler(ByVal connection As Interceptor, ByVal data As Byte())
        Return
    End Sub
    Private Sub ConnectionHandler(ByVal connection As Interceptor)
        Return
    End Sub
    Private Sub StateChangeHandler()
        Return
    End Sub
 
    Private Sub DisconnectFilterHandler(ByVal connection As Interceptor)
        SyncLock Me
            _Connections.Remove(connection.GUID)
            ConnectionPool.Push(connection)
        End SyncLock
 
        DisconnectEvent(connection)
    End Sub
 
#End Region
 
    Private Function IPv4Addresses() As IPAddress()
        Dim T As New List(Of IPAddress)
 
        For Each I As IPAddress In Dns.GetHostEntry(Dns.GetHostName).AddressList
            If IsPrivateIPv4(I) Then T.Add(I)
        Next
 
        Return T.ToArray()
    End Function
    Private Function IsPrivateIPv4(ByVal address As IPAddress) As Boolean
        If Not address.AddressFamily = AddressFamily.InterNetwork Then Return False
 
        Dim I As Byte() = address.GetAddressBytes
        Return I(0) = 10 OrElse (I(0) = 172 AndAlso I(1) > 15 AndAlso I(1) < 32) OrElse (I(0) = 192 AndAlso I(1) = 168)
    End Function
 
    Sub Listen(ByVal remoteHost As String, ByVal remotePort As UShort)
        Try
            SyncLock Me
                If _Listening Then Return
                _Listening = True
 
                StateChange()
 
                LocalEndPoint = New IPEndPoint(IPv4Addresses(0), 0)
                RemoteEndPoint = New IPEndPoint(IPAddress.Parse(remoteHost), remotePort)
 
                For I As Integer = 1 To 20 'Change this for more concurrent connections.
                    ConnectionPool.Push(New Interceptor(LocalEndPoint, RemoteEndPoint, ServerToClient, ClientToServer, ConnectEvent, DisconnectFilter))
                Next
 
                Master = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
                Master.Bind(RemoteEndPoint)
                Master.Listen(3)
 
                Dim E As New SocketAsyncEventArgs
                AddHandler E.Completed, AddressOf AcceptAsync
 
                If Not Master.AcceptAsync(E) Then
                    AcceptAsync(Master, E)
                End If
            End SyncLock
        Catch
            Close()
        End Try
    End Sub
 
    Private Sub AcceptAsync(ByVal sender As Object, ByVal e As SocketAsyncEventArgs)
        Try
            If e.LastOperation = SocketAsyncOperation.Accept AndAlso e.SocketError = SocketError.Success Then
                SyncLock Me
                    Dim Interceptor As Interceptor = ConnectionPool.Pop
                    _Connections.Add(Interceptor.GUID, Interceptor)
                    Interceptor.Initialize(e.AcceptSocket)
                End SyncLock
 
                e.AcceptSocket = Nothing
                If Not Master.AcceptAsync(e) Then
                    AcceptAsync(Master, e)
                End If
            Else
                Close()
            End If
        Catch
            Close()
        End Try
    End Sub
 
    Sub Close()
        SyncLock Me
            If Not _Listening Then Return
            _Listening = False
 
            Try
                Master.Close()
            Catch
                'Do Nothing
            End Try
 
            Dim E As Dictionary(Of Guid, Interceptor).Enumerator = _Connections.GetEnumerator
            While E.MoveNext
                E.Current.Value.Close()
            End While
 
            _Connections.Clear()
        End SyncLock
    End Sub
 
End Class
 
Class Interceptor
 
    Private Closing As Boolean
 
    Private ClientSocket As Socket
    Private ServerSocket As Socket
 
    Private LocalEndPoint As IPEndPoint
    Private RemoteEndPoint As IPEndPoint
 
    Private ConnectEventArgs As SocketAsyncEventArgs
    Private ServerRead As SocketAsyncEventArgs
    Private ClientRead As SocketAsyncEventArgs
 
    Private ServerRecvEvent As Carrier.RecieveDG
    Private ClientRecvEvent As Carrier.RecieveDG
    Private ConnectEvent As Carrier.ConnectionDG
    Private DisconnectEvent As Carrier.ConnectionDG
 
    Private Const BufferSize As Integer = 65535 'Change this to increase maximum packet size.
 
    Private _GUID As Guid
    ReadOnly Property GUID As Guid
        Get
            Return _GUID
        End Get
    End Property
 
    Sub New(ByVal local As IPEndPoint, ByVal remote As IPEndPoint, _
            ByVal serverRecv As Carrier.RecieveDG, _
            ByVal clientRecv As Carrier.RecieveDG, _
            ByVal connect As Carrier.ConnectionDG, _
            ByVal disconnect As Carrier.ConnectionDG)
 
        _GUID = GUID.NewGuid
 
        LocalEndPoint = local
        RemoteEndPoint = remote
 
        ServerRecvEvent = serverRecv
        ClientRecvEvent = clientRecv
        ConnectEvent = connect
        DisconnectEvent = disconnect
 
        ConnectEventArgs = New SocketAsyncEventArgs
        ConnectEventArgs.RemoteEndPoint = remote
 
        ServerRead = New SocketAsyncEventArgs
        ClientRead = New SocketAsyncEventArgs
 
        ServerRead.SetBuffer(New Byte(BufferSize - 1) {}, 0, BufferSize)
        ClientRead.SetBuffer(New Byte(BufferSize - 1) {}, 0, BufferSize)
 
        AddHandler ConnectEventArgs.Completed, AddressOf ConnectAsync
        AddHandler ServerRead.Completed, AddressOf ServerReadAsync
        AddHandler ClientRead.Completed, AddressOf ClientReadAsync
    End Sub
 
    Sub Initialize(ByVal socket As Socket)
        Try
            Closing = False
            ClientSocket = socket
 
            ServerSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            ServerSocket.Bind(LocalEndPoint)
 
            If Not ServerSocket.ConnectAsync(ConnectEventArgs) Then
                ConnectAsync(ServerSocket, ConnectEventArgs)
            End If
        Catch
            Close()
        End Try
    End Sub
 
    Private Sub ConnectAsync(ByVal sender As Object, ByVal e As SocketAsyncEventArgs)
        Try
            If e.LastOperation = SocketAsyncOperation.Connect AndAlso e.SocketError = SocketError.Success Then
                ConnectEvent(Me)
 
                Dim T As New Thread(AddressOf GuaranteeClientRead)
                T.IsBackground = True
                T.Start()
 
                If Not ServerSocket.ReceiveAsync(ServerRead) Then
                    ServerReadAsync(ServerSocket, ServerRead)
                End If
            Else
                Close()
            End If
        Catch
            Close()
        End Try
    End Sub
 
    Private Sub GuaranteeClientRead()
        If Not ClientSocket.ReceiveAsync(ClientRead) Then
            ClientReadAsync(ClientSocket, ClientRead)
        End If
    End Sub
 
    Private Sub ServerReadAsync(ByVal sender As Object, ByVal e As SocketAsyncEventArgs)
        Try
            If e.LastOperation = SocketAsyncOperation.Receive AndAlso e.SocketError = SocketError.Success AndAlso e.BytesTransferred > 0 Then
                Dim Data(e.BytesTransferred - 1) As Byte
                Buffer.BlockCopy(e.Buffer, 0, Data, 0, e.BytesTransferred)
                ServerRecvEvent(Me, Data)
 
                If Not ServerSocket.ReceiveAsync(e) Then
                    ServerReadAsync(ServerSocket, e)
                End If
            Else
                Close()
            End If
        Catch
            Close()
        End Try
    End Sub
 
    Private Sub ClientReadAsync(ByVal sender As Object, ByVal e As SocketAsyncEventArgs)
        Try
            If e.LastOperation = SocketAsyncOperation.Receive AndAlso e.SocketError = SocketError.Success AndAlso e.BytesTransferred > 0 Then
                Dim Data(e.BytesTransferred - 1) As Byte
                Buffer.BlockCopy(e.Buffer, 0, Data, 0, e.BytesTransferred)
                ClientRecvEvent(Me, Data)
 
                If Not ClientSocket.ReceiveAsync(e) Then
                    ClientReadAsync(ClientSocket, e)
                End If
            Else
                Close()
            End If
        Catch
            Close()
        End Try
    End Sub
 
    Private Sub SendAsync(ByVal sender As Object, ByVal e As SocketAsyncEventArgs)
        If Not e.LastOperation = SocketAsyncOperation.Send AndAlso e.SocketError = SocketError.Success Then
            Close()
        End If
    End Sub
 
    Sub Close()
        SyncLock Me
            If Closing Then Return
            Closing = True
 
            Try
                ServerSocket.Close()
            Catch
                'Do nothing
            End Try
 
            Try
                ClientSocket.Close()
            Catch
                'Do nothing
            End Try
 
            ServerSocket = Nothing
            ClientSocket = Nothing
 
            DisconnectEvent(Me)
        End SyncLock
    End Sub
 
    Sub SendToServer(ByVal data As Byte())
        Try
            Dim E As New SocketAsyncEventArgs
            E.SetBuffer(data, 0, data.Length)
            AddHandler E.Completed, AddressOf SendAsync
 
            If Not ServerSocket.SendAsync(E) Then
                SendAsync(ServerSocket, E)
            End If
        Catch
            Close()
        End Try
    End Sub
 
    Sub SendToClient(ByVal data As Byte())
        Try
            Dim E As New SocketAsyncEventArgs
            E.SetBuffer(data, 0, data.Length)
            AddHandler E.Completed, AddressOf SendAsync
 
            If Not ClientSocket.SendAsync(E) Then
                SendAsync(ClientSocket, E)
            End If
        Catch
            Close()
        End Try
    End Sub
 
End Class

Comments