Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: FJDA en 20 Enero 2021, 22:55 pm



Título: uso de Socks5 en NET
Publicado por: FJDA en 20 Enero 2021, 22:55 pm
Usé el buscador de elhacker.net y solo encontré un hilo.

He intentado hacer que mi aplicación se conecte via socks5 con proxy de Tor (http://127.0.0.1:9150) pero sin éxito.

Por ejemplo mediante API:

Código
  1. Imports System.Runtime.InteropServices
  2. Imports System.Net
  3.  
  4. Public Class Form1
  5.    <Runtime.InteropServices.DllImport("wininet.dll", SetLastError:=True)> _
  6.    Private Shared Function InternetSetOption(ByVal hInternet As IntPtr, ByVal dwOption As Integer, ByVal lpBuffer As IntPtr, ByVal lpdwBufferLength As Integer) As Boolean
  7.    End Function
  8.  
  9.    Public Structure Struct_INTERNET_PROXY_INFO
  10.        Public dwAccessType As Integer
  11.        Public proxy As IntPtr
  12.        Public proxyBypass As IntPtr
  13.    End Structure
  14.  
  15.    Private Sub Use_Proxy(ByVal strProxy As String)
  16.        Const INTERNET_OPTION_PROXY As Integer = 38
  17.        'Const INTERNET_OPEN_TYPE_PROXY As Integer = 3
  18.        Const INTERNET_DEFAULT_SOCKS_PORT As Integer = 1080
  19.        Dim struct_IPI As Struct_INTERNET_PROXY_INFO
  20.  
  21.        struct_IPI.dwAccessType = INTERNET_DEFAULT_SOCKS_PORT
  22.        struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy)
  23.        struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local")
  24.  
  25.        Dim intptrStruct As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI))
  26.  
  27.        Marshal.StructureToPtr(struct_IPI, intptrStruct, True)
  28.  
  29.        Dim iReturn As Boolean = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, System.Runtime.InteropServices.Marshal.SizeOf(struct_IPI))
  30.    End Sub
  31.  
  32.  
  33.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  34.  
  35. Use_Proxy("http://127.0.0.1:9150")
  36.    End Sub
  37.  
  38.  


Para probarlo he intentado descargar una página WEB, pero antes he configurado IE para que se conecte mediante el proxy 127.0.0.1.  De modo que IE y Chrome no tiene acceso a no ser que TOR esté ejecutándose.    Sin embargo el programa descarga la WEB aunque TOR no se ejecute.                                                          

Código
  1.    Public Function ConseguirHTML(ByVal strURL As String) As String
  2.        Dim strCode As String
  3.  
  4.        Dim Request As Net.HttpWebRequest = Net.HttpWebRequest.Create(strURL)
  5.        Using StrReader As New IO.StreamReader(Request.GetResponse().GetResponseStream, System.Text.Encoding.UTF8)
  6.  
  7.            strCode = StrReader.ReadToEnd
  8.  
  9.        End Using
  10.  
  11.  



También probé lo siguiente:

Código
  1.     Dim wp As WebProxy = New WebProxy("http://127.0.0.1:9150")
  2.  
  3.        Using myWebClient As New System.Net.WebClient()
  4.  
  5.            myWebClient.Proxy = wp
  6.            myWebClient.UseDefaultCredentials = False
  7.  
  8.            Dim resultHTML() As Byte = myWebClient.DownloadData(strURL)
  9.            Dim DefaultEnc As System.Text.Encoding = System.Text.Encoding.Default
  10.            Dim myResultString As String = DefaultEnc.GetString(resultHTML)
  11.            Return myResultString
  12.        End Using
  13.  

Con esto ocurre dos cosas, si TOR no se ejecuta lanza el siguiente error:

Código:
SocketException: No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión 127.0.0.1:9150

Cuando TOR se está ejecutando lanza el siguiente error:

Código:
System.Net.WebException: 'Error en el servidor remoto: (501) Sin implementar.'

Sin importar la configuración de la red local que tenga.


No quiero tener que usar librerías de terceros, estaría bien una solución para esto. Se solucionaría si se conectara usando la configuración de IE, algo que obviamente no hace.