use*_*033 2 connection proxy haskell tor socks
我已经在这个问题上工作了几个星期,但似乎无法得到它......我一直在尝试编写一个连接到socks5代理(即tor)的Haskell程序,这样我就可以访问洋葱网站了从程序内部,但它不起作用.
为了给你布局,我在localhost @ 9050上运行它肯定有效,因为我可以配置我的浏览器通过socks5使用它.Privoxy没有运行.
源代码是:
import Network
import Network.Socket
import Network.Socks5
getonion :: IO ()
getonion = do
putStrLn "Connecting..."
sock <- socksConnectWith (defaultSocksConf "localhost" (PortNum 9050)) "exampleonion.onion" (PortNumber 80)
putStrLn "Connected!"
Run Code Online (Sandbox Code Playgroud)
每次运行getonion时,它总会导致:
Connecting...
*** Exception: connect: does not exist (Connection refused)
Run Code Online (Sandbox Code Playgroud)
我尝试使用各种方式连接到localhost,即此处和此处引用的其他函数,但socksConnectWith似乎最直接.
如果有人能帮我解决这个问题,我将不胜感激.我甚至可以将来自我的程序的wireshark数据包发布到localhost.谢谢.
而不是使用PortNum构造函数,只需在源文件中写入端口号:
sock <- socksConnectWith (defaultSocksConf "localhost" 9050) "exampleonion.onion" (PortNumber 80)
Run Code Online (Sandbox Code Playgroud)
注意事实上你是如何使用的PortNumber 80,因为构造函数PortNumber实际上接受了一个类型的参数PortNumber,而不是Word16(它产生一个PortID;不幸的是,类型和构造函数允许具有相同的名称,即使它们是不相关的).
在Haskell中,像上面这样的整数文字是(比如说)的缩写fromInteger 80,而fromInteger函数(来自Num类型类,它PortNumber是一个实例)会将给定的整数转换为网络字节顺序 - 直接构造函数应用程序不会.
甚至可能犯这个错误的事实(据我所知)只是网络包的API设计不良的工件.虽然最近这种情况有所改善,但是如果不对网络软件包进行API更改,就很难对其中的一些客户端造成不利影响.