"Proxy" erstellen

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    "Proxy" erstellen

    Hi,

    ich würde gerne ein Proxy (für IE, Mozilla, ...) erstellen.

    Kennt jemand ein gutes Tutorial?
    Oder weiß jemand wie das geht?

    Ich habe bis jetzt nur das hier gefunden vbarchiv.net/workshop/workshop…-eines-proxy-servers.html das braucht aber leider WinSock und das gibt es ja nicht mehr in VB.

    LG
    Morifize

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Also: was definierst du unter blocken/entblocken? Wenn du z.B Seiten Umleiten willst, müsstest du szs. eine Manipulierte hosts-Datei in das System schmuggeln.
    Hier bei Semper-Video wird erklärt wie das geht (ich hab bei Sempervideo einfach nach Binder gesucht): sempervideo.de/?tag=binder
    Viel spass beim Anschauen!

    /€: Das war der jvbsl wieder mal schneller :P
    /€²: Hier, hab den Code mal von C# nach VB.NET übersetzen lassen!

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.Net.Sockets
    3. Imports System.Text
    4. Imports System.IO
    5. Imports System.Threading
    6. Namespace WebProxy2
    7. Class WebProxy2
    8. Private clientSocket As Socket
    9. Private read As [Byte]() = New Byte(1023) {}
    10. Private Buffer As [Byte]() = Nothing
    11. Private ASCII As Encoding = Encoding.ASCII
    12. Const HTTP_VERSION As String = "HTTP/1.0"
    13. Const CRLF As String = vbCr & vbLf
    14. Private RecvBytes As [Byte]() = New [Byte](4095) {}
    15. Public Sub New(socket As Socket)
    16. Me.clientSocket = socket
    17. End Sub
    18. Public Sub run()
    19. Dim clientmessage As [String] = " ", sURL As [String] = " "
    20. Dim bytes As Integer = readmessage(read, clientSocket, clientmessage)
    21. If bytes = 0 Then
    22. Return
    23. End If
    24. Dim index1 As Integer = clientmessage.IndexOf(" "C)
    25. Dim index2 As Integer = clientmessage.IndexOf(" "C, index1 + 1)
    26. If (index1 = -1) OrElse (index2 = -1) Then
    27. Throw New IOException()
    28. End If
    29. Console.WriteLine("Connecting to Site: {0}", clientmessage.Substring(index1 + 1, index2 - index1))
    30. Console.WriteLine("Connection from {0}", clientSocket.RemoteEndPoint)
    31. Dim part1 As String = clientmessage.Substring(index1 + 1, index2 - index1)
    32. Dim index3 As Integer = part1.IndexOf("/"C, index1 + 8)
    33. Dim index4 As Integer = part1.IndexOf(" "C, index1 + 8)
    34. Dim index5 As Integer = index4 - index3
    35. sURL = part1.Substring(index1 + 4, (part1.Length - index5) - 8)
    36. Try
    37. Dim IPHost As IPHostEntry = Dns.Resolve(sURL)
    38. Console.WriteLine("Request resolved: ", IPHost.HostName)
    39. Dim aliases As String() = IPHost.Aliases
    40. Dim address As IPAddress() = IPHost.AddressList
    41. Console.WriteLine(address(0))
    42. Dim sEndpoint As New IPEndPoint(address(0), 80)
    43. Dim IPsocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    44. IPsocket.Connect(sEndpoint)
    45. If IPsocket.Connected Then
    46. Console.WriteLine("Socket connect OK")
    47. End If
    48. Dim [GET] As String = clientmessage
    49. Dim ByteGet As [Byte]() = ASCII.GetBytes([GET])
    50. IPsocket.Send(ByteGet, ByteGet.Length, 0)
    51. Dim rBytes As Int32 = IPsocket.Receive(RecvBytes, RecvBytes.Length, 0)
    52. Console.WriteLine("Recieved {0}", +rBytes)
    53. 'Buffer = RecvBytes;
    54. Dim strRetPage As [String] = Nothing
    55. strRetPage = strRetPage & ASCII.GetString(RecvBytes, 0, rBytes)
    56. While rBytes > 0
    57. rBytes = IPsocket.Receive(RecvBytes, RecvBytes.Length, 0)
    58. strRetPage = strRetPage & ASCII.GetString(RecvBytes, 0, rBytes)
    59. End While
    60. IPsocket.Shutdown(SocketShutdown.Both)
    61. IPsocket.Close()
    62. sendmessage(clientSocket, strRetPage)
    63. Catch exc2 As Exception
    64. Console.WriteLine(exc2.ToString())
    65. End Try
    66. End Sub
    67. Private Function readmessage(ByteArray As Byte(), ByRef s As Socket, ByRef clientmessage As [String]) As Integer
    68. Dim bytes As Integer = s.Receive(ByteArray, 1024, 0)
    69. Dim messagefromclient As String = Encoding.ASCII.GetString(ByteArray)
    70. clientmessage = DirectCast(messagefromclient, [String])
    71. Return bytes
    72. End Function
    73. Private Sub sendmessage(s As Socket, message As String)
    74. Buffer = New [Byte](message.Length) {}
    75. Dim length As Integer = ASCII.GetBytes(message, 0, message.Length, Buffer, 0)
    76. s.Send(Buffer, length, 0)
    77. End Sub
    78. Private Shared Sub Main(args As String())
    79. Const port As Integer = 8889
    80. Dim tcplistener As New TcpListener(port)
    81. Console.WriteLine("Listening on port {0}", +port)
    82. tcplistener.Start()
    83. While True
    84. Dim socket As Socket = tcplistener.AcceptSocket()
    85. Dim webproxy As New WebProxy2(socket)
    86. Dim thread As New Thread(New ThreadStart(AddressOf webproxy.run))
    87. thread.Start()
    88. End While
    89. End Sub
    90. End Class
    91. End Namespace


    Sollte eigentlich C&P sein. Viel spass!
    die anwendung muss einfach laufen(kann auch auf dem aktuellen PC sein), dann musst du die Procies von Windows und den Browsern ändern(localhost sollte funktionieren, wenn das Programm auf dem aktuellen PC läuft...)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Habs hinbekommen :D Aber es kommt jetzt ne Fehlermeldung bei:

    VB.NET-Quellcode

    1. Private Function readmessage(ByVal ByteArray As Byte(), ByRef s As Socket, ByRef clientmessage As [String]) As Integer
    2. Dim bytes As Integer = s.Receive(ByteArray, 1024, 0)
    3. Dim messagefromclient As String = Encoding.ASCII.GetString(ByteArray)
    4. clientmessage = DirectCast(messagefromclient, [String])
    5. Return bytes
    6. End Function



    "NullReferenceException wurde nicht behandelt" (bei Dim bytes As Integer = ...)

    Aber das Stimm doch alles ;)

    Wo liegt der Fehler?

    LG
    Morifize

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Morifize“ ()

    Dim socket As Socket = tcplistener.AcceptSocket()
    Dim webproxy As New WebProxy2(socket)
    setz da mal Haltepunkte und guck ob socket hier deklariert ist(sollte erst dahin kommen, wenn sich ein Client verbindet - z.B. der IE)...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hi,

    hier ein bisschen mehr Code:

    VB.NET-Quellcode

    1. Public Sub New(ByVal socket As Socket)
    2. Me.clientSocket = socket
    3. End Sub
    4. Sub New()
    5. ' TODO: Complete member initialization
    6. End Sub
    7. Public Sub run()
    8. Dim clientmessage As [String] = " ", sURL As [String] = " "
    9. Dim bytes As Integer = readmessage(read, clientSocket, clientmessage)
    10. If bytes = 0 Then
    11. Return
    12. End If
    13. Dim index1 As Integer = clientmessage.IndexOf(" "c)
    14. Dim index2 As Integer = clientmessage.IndexOf(" "c, index1 + 1)
    15. If (index1 = -1) OrElse (index2 = -1) Then
    16. Throw New IOException()
    17. End If
    18. Console.WriteLine("Connecting to Site: {0}", clientmessage.Substring(index1 + 1, index2 - index1))
    19. Console.WriteLine("Connection from {0}", clientSocket.RemoteEndPoint)


    Und starten tue ich so:

    VB.NET-Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. Dim cls As New WebProxy2.WebProxy2()
    3. cls.run()
    4. End Sub


    LG
    Morifize
    Starten tust du so: ;)

    VB.NET-Quellcode

    1. Const port As Integer = 8889
    2. Dim tcplistener As New TcpListener(port)
    3. Console.WriteLine("Listening on port {0}", +port)
    4. tcplistener.Start()
    5. While True
    6. Dim socket As Socket = tcplistener.AcceptSocket()
    7. Dim webproxy As New WebProxy2(socket)
    8. Dim thread As New Thread(New ThreadStart(AddressOf webproxy.run))
    9. thread.Start()
    10. End While
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hi

    also wenn ich Deinen Code so benutze wie er ist, kommen Fehlermeldungen, wenn ich die Besietige kommt zwar keine Fehlermeldung mehr (auch im gestarteten Programm) Aber es öffnet sich auch keine Console, ...

    VB.NET-Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. Const port As Integer = 8889
    3. Dim tcplistener As New Net.Sockets.TcpListener(port)
    4. Console.WriteLine("Listening on port {0}", +port)
    5. tcplistener.Start()
    6. While True
    7. Dim socket As Net.Sockets.Socket = tcplistener.AcceptSocket()
    8. Dim webproxy As New WebProxy2.WebProxy2(socket)
    9. Dim thread As New Threading.Thread(New ThreadStart(AddressOf webproxy.run))
    10. thread.Start()
    11. End While
    12. End Sub



    LG
    Morifize
    das liegt daran, dass du eine WindowsForms Anwendung hast, da läuft das ganze auch nicht in einer Konsolenanwendung ab;)

    Außerdem müsstest du den Code aus dem Button, wohl am besten in einen extra Thread packen, da ansonsten das gesamte Programm einfriert(einfacher wäre aber auch bei der Kommunikation mit dem Benutzer eine Konsolenanwendung...)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Sorry, ich bin blöd :D

    theoretisch müsste ich dann wenn ich das Programm gestartet habe und dann IE öffne mit dem port "8889" ins Internet gehen, oder? Also über den Proxy. Wenn ich aber im CMD "netstat" eigebe erscheint nicht der Port, da erscheint mein ganz normaler :wacko:

    Fehlt da vielleicht doch nicht noch was in der "Sub new"? Da steht ja auch "'TO DO ..."


    Ich habe den Code auch nochmal in der Konsole ausprobiert. Da kommt zwar dann "Listening on port 8889" aber sonst auch nix :S

    LG
    Morifize

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Morifize“ ()

    das Todo interessiert nicht, da du den anderen Konstruktor ja verwendest ;)

    du musst den Proxy im IE und Co. auf localhost setzen und den Port auf den entsprechenden...

    Wenn du den Code in eine Konsole gepackt hast(und den Proxy ausführst), mit dem IE connectest, dann sollte dir das in der Konsole deutlich gemacht werden...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---