gpt4 book ai didi

Haskell SOCKS5 拒绝连接

转载 作者:行者123 更新时间:2023-12-02 16:36:35 32 4
gpt4 key购买 nike

我已经研究这个问题好几个星期了,但似乎无法解决......我一直在尝试编写一个连接到socks5代理(即tor)的Haskell程序,这样我就可以从程序内访问洋葱网站,但它不起作用。

为了给你布局,我在 localhost@9050 上运行了 tor,它当然可以工作,因为我可以配置我的浏览器通过ocks5使用它。 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!"

每次我运行 getonion 时,它总是会导致:

Connecting...
*** Exception: connect: does not exist (Connection refused)

我尝试使用各种方式连接到本地主机,即引用的其他函数 herehere ,但ocksConnectWith似乎是最简单的。

如果有人能帮我解决这个问题,我将不胜感激。我什至可以将来 self 的程序的wireshark 数据包发布到本地主机。谢谢。

最佳答案

不使用 PortNum 构造函数,只需在源文件中写入端口号即可:

sock <- socksConnectWith (defaultSocksConf "localhost" 9050) "exampleonion.onion" (PortNumber 80)

请注意,实际上您已经使用 PortNumber 80 执行此操作,因为构造函数 PortNumber 实际上采用 PortNumber 类型的参数,不是 Word16(它生成 PortID;不幸的是,类型和构造函数允许具有相同的名称,即使它们在其他方面不相关)。

在 Haskell 中,像上面这样的整数文字是(例如)fromInteger 80fromInteger 函数(来自 Num 类型)的缩写类,其中 PortNumber 是一个实例)将给定的整数转换为网络字节顺序 - 直接构造函数应用程序不会。

事实上,甚至有可能犯这个错误(据我所知),这只是网络包 API 设计不佳的结果。尽管这种情况最近有所改善,但很难在不打扰众多客户端的情况下对网络包进行 API 更改。

关于Haskell SOCKS5 拒绝连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172149/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com