использование Tor в качестве прокси

Я пытаюсь использовать Tor-Server в качестве прокси-сервера в HttpWebRequest , мой код выглядит так:

 HttpWebRequest request; HttpWebResponse response; request = (HttpWebRequest)WebRequest.Create("http://www.google.com"); request.Proxy = new WebProxy("127.0.0.1:9051"); response = (HttpWebResponse)request.GetResponse(); response.Close(); 

он отлично работает с «обычными» прокси, но с Tor я получаю исключения во время вызова

GetResponse() with Status = ServerProtocolViolation. The message is (in German...):Message = "Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseStatusLine"

Если у вас установлено и работает privoxy, вы можете сделать

 request.Proxy = new WebProxy("127.0.0.1:8118"); // default privoxy port 

Это позволит вам делать запросы, используя

Tor не является прокси-сервером HTTP. Это прокси-сервер SOCKS. Вы можете использовать прокси-сервер HTTP, который поддерживает пересылку на SOCKS (например, Privoxy) и подключается к нему с помощью кода.

Да, как сказал другой плакат, нужен клиент для носков. Некоторые библиотеки – это прокси- сервер Starksoft Proxy , ProxySocket и компонентный прокси- сервер . sockscap – это инструмент, который перехватывает и перенаправляет вызовы winsock, а privoxy – это локальный прокси-сервер, который может туннелировать ваши запросы поверх носков. Несколько различных решений.

Используйте библиотеку «SocksWebProxy». Вы можете использовать его с WebClient & WebRequest (просто назначьте новый SocksWebProxy атрибуту * .Proxy). Нет необходимости в Privoxy или аналогичной услуге для перевода трафика HTTP на tor.

https://github.com/Ogglas/SocksWebProxy

Я сделал некоторые расширения для него, включив порт управления. Вот как вы могли бы запустить Tor в фоновом режиме без пула Tor Browser Bundle и управлять Tor, мы можем использовать Telnet или отправлять команды программно через Socket.

 Socket server = null; //Authenticate using control password IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9151); server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); server.Connect(endPoint); server.Send(Encoding.ASCII.GetBytes("AUTHENTICATE \"your_password\"" + Environment.NewLine)); byte[] data = new byte[1024]; int receivedDataLength = server.Receive(data); string stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength); //Request a new Identity server.Send(Encoding.ASCII.GetBytes("SIGNAL NEWNYM" + Environment.NewLine)); data = new byte[1024]; receivedDataLength = server.Receive(data); stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength); if (!stringData.Contains("250")) { Console.WriteLine("Unable to signal new user to server."); server.Shutdown(SocketShutdown.Both); server.Close(); } else { Console.WriteLine("SIGNAL NEWNYM sent successfully"); } 

Шаги для настройки Tor:

  1. Скопируйте torrc-defaults в каталог, в котором находится tor.exe. Каталог по умолчанию, если вы используете браузер Tor: «~ \ Tor Browser \ Browser \ TorBrowser \ Data \ Tor”
  2. Откройте окно подсказки cmd
  3. chdir в каталог, где находится tor.exe. Каталог по умолчанию, если вы используете браузер Tor: «~ \ Tor Browser \ Browser \ TorBrowser \ Tor \”
  4. Создайте пароль для доступа к управляющему порту Tor. tor.exe --hash-password “your_password_without_hyphens” | more
  5. Добавьте свой пароль password hash в torrc-defaults в ControlPort 9151. Он должен выглядеть примерно так: hashedControlPassword 16:3B7DA467B1C0D550602211995AE8D9352BF942AB04110B2552324B2507 . Если вы принимаете свой пароль как «пароль», вы можете скопировать строку выше.
  6. Теперь вы можете получить доступ к управлению Tor через Telnet после его запуска. Теперь код может запускаться, просто отредактируйте путь к тому месту, где находятся файлы Tor в программе. Проверка модификации Tor через Telnet:
  7. Запустите tor с помощью следующей команды: tor.exe -f .\torrc-defaults
  8. Откройте другую подсказку cmd и введите: telnet localhost 9151
  9. Если все пойдет хорошо, вы увидите полностью черный экран. Введите « autenticate “your_password_with_hyphens” « Если все пойдет хорошо, вы должны увидеть «250 OK».
  10. Напечатайте « SIGNAL NEWNYM », и вы получите новый маршрут, ergo новый IP. Если все пойдет хорошо, вы должны увидеть «250 OK».
  11. Введите « setevents circ » (события схемы), чтобы включить вывод консоли
  12. Введите « getinfo circuit-status », чтобы увидеть текущие цепи

Вам нужно «извлечь» stream из носков …

 Imports System.IO Imports System.Net Imports System.Net.Sockets Imports System.Text Imports System.Runtime.CompilerServices Public Class Form1 Sub Form1_Load() Handles Me.Load Dim Host As String = "google.com" Dim P As New SocksProxy("localhost", 64129) 'Set your socks proxy here Dim Stream As NetworkStream = P.GetStream(Host, 80) Dim buffer As Byte() = Download(Stream, Host, "") My.Computer.FileSystem.WriteAllBytes("C:\webpage.html", buffer, False) MsgBox("ok") End Sub Function Download(Stream As NetworkStream, Host As String, Resource As String) As Byte() Using writer = New StreamWriter(Stream) writer.Write(String.Format("GET /{2} HTTP/1.1{0}Host: {1}{0}{0}", vbCrLf, Host, Resource)) writer.Flush() Dim byteList As New List(Of Byte) Dim bufferSize As Integer = 4096 Dim buffer(bufferSize - 1) As Byte Do Dim bytesRead As Integer = Stream.Read(buffer, 0, bufferSize) byteList.AddRange(buffer.Take(bytesRead)) Loop While Stream.DataAvailable Return byteList.ToArray End Using End Function End Class Public Class SocksProxy Private _SocksHost As String Private _SocksPort As Integer Sub New(SocksHost As String, SocksPort As Integer) _SocksHost = SocksHost _SocksPort = SocksPort End Sub Function GetStream(HostDest As String, PortDest As Short) As NetworkStream Dim client As TcpClient = New TcpClient() client.Connect(_SocksHost, _SocksPort) Dim stream As NetworkStream = client.GetStream() 'Auth Dim buf = New Byte(299) {} buf(0) = &H5 buf(1) = &H1 buf(2) = &H0 stream.Write(buf, 0, 3) ReadExactSize(stream, buf, 0, 2) If buf(0) <> &H5 Then Throw New IOException("Invalid Socks Version") End If If buf(1) = &HFF Then Throw New IOException("Socks Server does not support no-auth") End If If buf(1) <> &H0 Then Throw New Exception("Socks Server did choose bogus auth") End If buf(0) = &H5 buf(1) = &H1 buf(2) = &H0 buf(3) = &H3 Dim domain = Encoding.ASCII.GetBytes(HostDest) buf(4) = CByte(domain.Length) Array.Copy(domain, 0, buf, 5, domain.Length) Dim port = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(CShort(PortDest))) buf(5 + domain.Length) = port(0) buf(6 + domain.Length) = port(1) stream.Write(buf, 0, domain.Length + 7) ' Reply ReadExactSize(stream, buf, 0, 4) If buf(0) <> &H5 Then Throw New IOException("Invalid Socks Version") End If If buf(1) <> &H0 Then Throw New IOException(String.Format("Socks Error {0:X}", buf(1))) End If Dim rdest = String.Empty Select Case buf(3) Case &H1 ' IPv4 ReadExactSize(stream, buf, 0, 4) Dim v4 = BitConverter.ToUInt32(buf, 0) rdest = New IPAddress(v4).ToString() Exit Select Case &H3 ' Domain name ReadExactSize(stream, buf, 0, 1) If buf(0) = &HFF Then Throw New IOException("Invalid Domain Name") End If ReadExactSize(stream, buf, 1, buf(0)) rdest = Encoding.ASCII.GetString(buf, 1, buf(0)) Exit Select Case &H4 ' IPv6 Dim octets = New Byte(15) {} ReadExactSize(stream, octets, 0, 16) rdest = New IPAddress(octets).ToString() Exit Select Case Else Throw New IOException("Invalid Address type") End Select ReadExactSize(stream, buf, 0, 2) Dim rport = CUShort(IPAddress.NetworkToHostOrder(CShort(BitConverter.ToUInt16(buf, 0)))) Return stream End Function Private Sub ReadExactSize(stream As NetworkStream, buffer As Byte(), offset As Integer, size As Integer) While size <> 0 Dim read = stream.Read(buffer, offset, size) If read < 0 Then Throw New IOException("Premature end") End If size -= read offset += read End While End Sub End Class 
  • Бесплатная альтернатива proxxyap
  • Определение данных сертификата TLS с помощью Microsoft Edge
  • Как сделать DNS через прокси в Firefox?
  • Использование Mac в качестве беспроводного маршрутизатора и запуск всего беспроводного трафика через прокси / VPN?
  • Использование npm за корпоративным прокси .pac
  • Привязать приложение к определенному сетевому интерфейсу
  • Как обходить ограничения IP через работу DNS в случае hulu.com?
  • Как настроить Squid Proxy (для служб localhost и Tor и I2P)
  • Все интернет-браузеры не будут разрешать DNS, кроме TorBrowser
  • «Noshell» для пользователей прокси-сервера ssh
  • Как использовать HTTP-прокси в java
  • Interesting Posts

    Получить начальную и конечную дату недели с учетом текущей даты и начала недели

    Уникальные случайные числа в целочисленном массиве на языке программирования C

    Как заставить Realtek HD Audio 5.1 работать в Windows 7?

    Различия между std :: make_unique и std :: unique_ptr

    Установить тип документа HTML5 с помощью XSLT

    C # Общие операторы

    Как запустить интегрированный видеоадаптер вместе с графическим процессором в системе Ivy Bridge?

    Получить элемент doubleclick event listview

    Как восстановить удаленный файл в Mac?

    Правильно Разбор JSON в Swift 3

    Выбор целого столбца, кроме первых X (заголовочных) ячеек в Excel

    Как получить команду сборки строки cmd для решения VS?

    Как сформировать изображение мозаики с помощью GIMP или другого приложения. Используя другие фотографии?

    Как вручную создавать файлы icns с помощью iconutil?

    Программное обеспечение для отслеживания использования Интернета на семейном компьютере

    Давайте будем гением компьютера.