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
Imports System.Runtime.InteropServices Imports System.Net Public Class Form1 <Runtime.InteropServices.DllImport("wininet.dll", SetLastError:=True)> _ Private Shared Function InternetSetOption(ByVal hInternet As IntPtr, ByVal dwOption As Integer, ByVal lpBuffer As IntPtr, ByVal lpdwBufferLength As Integer) As Boolean End Function Public Structure Struct_INTERNET_PROXY_INFO Public dwAccessType As Integer Public proxy As IntPtr Public proxyBypass As IntPtr End Structure Private Sub Use_Proxy(ByVal strProxy As String) Const INTERNET_OPTION_PROXY As Integer = 38 'Const INTERNET_OPEN_TYPE_PROXY As Integer = 3 Const INTERNET_DEFAULT_SOCKS_PORT As Integer = 1080 Dim struct_IPI As Struct_INTERNET_PROXY_INFO struct_IPI.dwAccessType = INTERNET_DEFAULT_SOCKS_PORT struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy) struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local") Dim intptrStruct As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI)) Marshal.StructureToPtr(struct_IPI, intptrStruct, True) Dim iReturn As Boolean = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, System.Runtime.InteropServices.Marshal.SizeOf(struct_IPI)) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Use_Proxy("http://127.0.0.1:9150") End Sub
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
Public Function ConseguirHTML(ByVal strURL As String) As String Dim strCode As String Dim Request As Net.HttpWebRequest = Net.HttpWebRequest.Create(strURL) Using StrReader As New IO.StreamReader(Request.GetResponse().GetResponseStream, System.Text.Encoding.UTF8) strCode = StrReader.ReadToEnd End Using
También probé lo siguiente:
Código
Dim wp As WebProxy = New WebProxy("http://127.0.0.1:9150") Using myWebClient As New System.Net.WebClient() myWebClient.Proxy = wp myWebClient.UseDefaultCredentials = False Dim resultHTML() As Byte = myWebClient.DownloadData(strURL) Dim DefaultEnc As System.Text.Encoding = System.Text.Encoding.Default Dim myResultString As String = DefaultEnc.GetString(resultHTML) Return myResultString End Using
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.