Socks Proxy для HttpWebRequest
Согласно моим исследованиям, пытаясь решить эту проблему, выясняется, что класс.Net WebProxy не поддерживает прокси-серверы Socks, что немного раздражает. Я также не могу найти какой-либо код или информацию, которая объясняет, как реализовать поддержку Socks 4/5 через класс, который можно легко использовать с HttpWebRequest (свойство Proxy, если быть точным).
Я нашел ограниченную информацию через Google о том, как я мог это сделать. Одно из предложений заключается в изменении настроек прокси в Internet Explorer, чего я бы не хотел делать.
Кто-нибудь знает что-нибудь, что может сделать работу или есть какие-либо предложения? Любая помощь приветствуется.
4 ответа
Я перепробовал множество библиотек.Net, которые утверждали, что поддерживают Socks4/5, но обнаружил, что многие из них просто не работают или будут иметь ошибку при попытке подключиться к прокси, которые, как я знал, работают.
Я закончил тем, что использовал компонент Sock/SSL от Chilkat Software, который, кажется, хорошо работает для меня, даже если мне приходится вручную создавать HTTP-запросы вместо использования HttpWebRequest, как мне бы хотелось.
- Примечание об обновлении: Chilkat.Http (аналог классу HttpWebRequest) изначально поддерживает прокси-серверы SOCKS. Так что не тратьте время, пытаясь закодировать свои собственные HTTP-запросы, как я; просто используйте
Chilkat.Http.SocksHostname
,Chilkat.Http.SocksPort
а такжеChilkat.Http.SocksVersion
свойства.
Изменение настроек прокси в IE вам совсем не поможет - другой автор просто заметил, что он работает для IE. Поскольку.NET Framework не поддерживает SOCKS, вам придется написать собственный конвертер CERN-Proxy в SOCKS-Proxy, чтобы.NET общался с прокси-сервером CERN (тип, который он поддерживает), а ваш код преобразовывал его в SOCKS прокси звонок.
FWIW, это то, что я сейчас хочу добавить в FiddlerCore (www.fiddler2.com/core), потому что у меня уже есть почти весь код. Единственное, что мне действительно нужно, это прокси SOCKSv4a для тестирования.
Начиная с .NET 6, прокси-серверы socks можно использовать изначально с
HttpClient
. См. Эту проблему на GitHub.
Используйте Privoxy или то же самое, чтобы создать http-шлюз для ваших носков.
Добавьте это в основной конфиг для цепочки Privoxy и socks:
forward-socks5 / proxy_host:port .
И что-то подобное, чтобы включить прямой доступ к вашей локальной сети:
forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .