hardline 您所在的位置:网站首页 hardline hardline

hardline

#hardline| 来源: 网络整理| 查看: 265

强硬p2p

应用级 P2P 隧道,无需 VPN 即可安全访问个人服务器。目前阿尔法/一切都可能改变!!

要求

OpenSSL、pynacl、dhtnode(仅在服务器端)、requests、six、lxml、dateutil

为 Android 构建

在使用 buildozer 之前,您必须将 setup.py 移出目录。否则,它将无法正常工作。由于某种原因,忽略 setup.py 文件的设置没有任何效果。

它能做什么

在计算机 A 上获取服务,并使其在计算机 B 上的 KEYHASH.localhost:7009 上可用。它通过两台计算机上的守护进程和它们之间的隧道来执行此操作,使用 SSL 加密,并且在 Internet 上工作,无需手动端口转发或任何需要注册动态 DNS 服务、手动获取证书或类似的东西.

紧密集成的 DrayerDB 系统提供了非常容易同步的数据库,不使用区块链,而是使用具有基于时间的冲突解决和快速增量更新的双序伪链。

该应用程序(用 Kivy 编写,可用于 Android 和桌面)还允许您浏览连接到 LAN 的服务,并以类似 wiki 的方式查看和编辑 DrayerDB 同步文件中的帖子。

理想情况下,您可以将智能设备带回家,将其插入路由器,在应用程序的列表中找到它,然后单击按钮跳转到浏览器。

然后,该书签将在世界任何地方工作!

除了所有这些,我们还使用分布式数据库提供日记和笔记。

此功能集成到同一个应用程序中,并使用同步服务功能。

现有技术: 废弃的类似 Mozilla 项目:[https://wiki.mozilla.org/FlyWeb] Tor/I2P 隐藏服务提供类似的功能(但 Hardline 不会尝试匿名或隐藏您的 IP,只是为了保护流量。) 不相似 IPFS:我们不是 bittorrent,我们不使用任何内容可寻址的东西,我们提供与自托管服务和可变分布式数据库的连接。 Zerotier:这不是 VPN。它不会与 VPN 冲突(尽管它可能会忽略它并使用 LAN 代替),并且它不作用于低层网络层。 可能相似 GUN 数据库似乎提供了与 Streams 功能类似的最终一致数据库 DAT:我们有类似的数据共享能力,但我们不管理任何版本历史。 Scuttlebutt:我们有类似的去中心化发布能力,但我们支持多个作者并且不使用链。 SyncThing 似乎使用类似的共享模型来同步文件。我们目前还没有同步文件。 这个怎么运作。

如果计算机 B 在同一网络上,则可以发现计算机 A 的地址,否则它将回退到使用我托管的公共 OpenDHT 代理(如果您运行一个,请告诉我,我很乐意添加一些冗余!)

如果计算机 B 以前曾成功连接到该服务,它会记住地址并尝试这些地址,即使 DHT 代理已关闭。即使最初的连接是通过 LAN,计算机 A 也会告诉 B 稍后在 WAN 上的哪里可以找到它。

计算机 A 可以提供多个优先的 WAN 地址。如果它连接到 Yggdrasil 网格,它将在列表中提供该地址,在正常 WAN 地址之后,因此即使没有互联网,您也应该能够在孤立的网格网络上连接。

计算机 A 使用本机 DHT,不依赖代理。

使用它

在具有该服务的计算机上(假设它在端口 80 上),使用 python3 hardline.py --service localhost --serviceport 80 --certfile foo.cert --localport 6767 --p2pport 7684

如果您想从网络外部访问服务,您的路由器上必须有 UPnP,或者手动打开一个到 P2P 端口的端口。

现在查看将创建的 foo.cert.hash。这是您的密钥哈希。绝对不要将包含的证书用于任何真实的东西,生成您自己的证书,它们仅用于一致的测试。

在计算机 B 上,启动python3 hardline.py并访问 hfhfdysvtziz6-e868423731872b8235a0adc9102bb45bb9e8321e.localhost:7009(将 hfhfdysvtziz6-e868423731872b8235a0adc9102bb45bb9e8321e 替换为您的密钥哈希文件内容)您可能需要重试该服务,但您应该重试几次

破折号后的URL部分必须保持原样,否则无法连接,但您可以自由选择之前的部分(hfhfdysvtziz6),最多替换为23个字符,只要其中没有破折号. 这可以用作密码保护的薄弱层,或添加虚荣文本。不过,您真的不应该依赖密码,它只是为了防止偶然的窥探者,并且您不能拥有两个具有不同自由文本和 URL 的相同主要部分的服务。

如果你安装了 Kivy,你也可以运行 GUI 版本。

德雷尔数据库

目前在 GUI 应用程序之外不支持 DrayerDB。它最终将被设计为一个图书馆。Eventuallu KaithemAutomation 应该能够充当同步服务器。

作为适当的服务运行

使用 setup.py install 或 pip3 install hardline 安装。然后您可以使用命令“hardlined”,它既充当客户端又充当服务器。

它采用以下选项:

--服务目录

您希望以简单 INI 格式公开的服务目录。有关示例,请参见 service_config_example。默认为 /etc/hardline/services。这是一个完整的文件的样子:

[Service] #The service you want to expose service=localhost port=80 #Use absolute paths for non-example applications. #The service file, and all it's associated files like the hash get created on-demand. #Look in myservice.cert.hash to find the hash ID for the URL. certfile=myservice.cert [Info] title="My Awesome Service" #Cache mode lets hardlinep2p cache the service. In this mode it will #Only support plain static content and will try to refresh files more than #a week old(configurability and more intelligence coming soon). #Files are cached as just plain files that only have the content. # Leave the "service" blank and this becomes cache-only, and a # very convenient way to serve some files from an Android device. # Because files and directories are the same thing to the web, newly-downloaded #files get postfixed with @http to avoid conflict with dirs. #For compatibility with manually-created files you want to serve, if the unpostfixed #file already exists, it will be used instead, and will be updated according to the same rules. #The root page will just be /cachedir/@http. /foo/bar will be /cachedir/foo/bar@http, but /foo/bar/ with # a trailing slash is /cachedir/foo/bar/@http #Caches do not support POST or cookies. When HTML files are smaller than 1MB and not served with chunked encoding or a download related content disposition, #Any embedded videos, audio, css links, and scripts that reference an absolute domain will be transparently converted to /cache_external_resource/path #links instead, allowing us to modern sites that use a ton of subdomains. #Cache services act like any other service with regards to remote access and the like. [Cache] directory="Leave this as an empty string for no cache" #All these are optional and have defaults: #Time in seconds before trying to refresh a cache item. maxAge= 36000000 #Size in bytes to try to limit the cache to maxSize=256000000 #Try to keep the total downloading to under this many mb/s. #Use this to protect your flash memory from cache churn! #Bursts are allowed, the quota refills up to the 1 hour max. downloadRateLimit=1200 #Dynamic content allows you to manually place a file ending with @mako #as a handler. /foo/bar?param=q gets mapped to /cachedir/foo/bar@mako. #These files are never fetched from the site, updated, or deleted. They are purely local, #As a convenience for adding trivial bits of dynamic behavior to your app. #There is NO sandboxing here whatsoever. Use files containing @data if your app #needs a bit of persistent storage. #The template has access to variable: #path, the str path, __file__, the absolute location of the template file dynamicContent=no [Access] #Set this to "no" to prevent publishing this service to the global DHT. #This saves bandwidth but makes accessing the service unreliable outside your local network. useDHT=yes --p2pport

用于传入安全连接的端口。默认值为 7008。如果您想提供公共服务(如果 UPnP 不为您提供服务),这是您在防火墙上打开的那个。

--本地端口

您的浏览器将用于连接到硬线服务的端口。默认值为 7009。

安卓支持

有一个 Android 应用只支持客户端模式,但允许您访问端口 7009 上的服务。由于它不使用任何类型的 DHT,因此数据使用量应该非常低。我没有任何要测试的新设备,但它在较旧的 android 上运行良好。这是我的第一个 android 应用程序,所以期待错误!

在 Android 上,您可以通过 GUI 创建服务。如果可能,缓存和服务信息将始终在 SD 卡上,甚至会从内部存储中复制到那里。如果设备和卡上的私钥很重要,请确保设备和卡的安全!!!!!!

安全注意事项

这是使用 SSL,我试图保持标准,避免有太多地方搞砸。它为服务器提供了一个加密通道,并且不允许人们制作具有相同十六进制标识符的恶意服务器。

除了您使用标准 HTTPS 获得的保护之外,它不提供任何保护(它会尝试,但您不应该依赖它)。人们可以嗅探流量以找到十六进制 ID,如果知道,任何人都可以连接到使用此工具公开的站点,这意味着您的服务必须提供所需的任何用户名/密码身份验证。

但是,您仍然应该对任何不应被允许连接的人保密您的十六进制 URL。许多远程攻击者无法轻松嗅探流量,我们也不会故意将 URL 泄露给您网络之外的任何人。您不应该依赖它,但它是一个有用的额外层,可以使攻击更加困难。

许多应用程序已经提供了一些基本的用户名/密码验证,因此使用这个工具应该是安全的。

您或您正在使用的应用程序必须提供您自己的登录机制。如果您访问一个站点并且没有看到密码提示,那么其他人也不会!

要记住的另一件事是,一长串随机字符看起来都一样。不要仅仅因为它们看起来与您想要的相似而从随机位置打开链接。

哈希之前的“密码”

哈希之前的“hfhfdysvtziz6”字符串实际上是一种非常弱的额外密码。直到使用 URL 的主要部分建立连接后才会发送它,因此不能以传统方式嗅探它,除非您与服务器(不仅仅是客户端)在同一个 LAN 上,其中您可以通过服务浏览功能获得它。

理论上,这在 99% 的情况下就足够了,但是,浏览器或操作系统本身可能会通过日志文件、分析、DNS 等泄漏此密码,并且在某些情况下攻击者很可能与服务器在同一个网络上. 尽管如此,它应该为远程攻击者提供一些有用的额外保护。

协议

字节通过 SSL 连接以 1 对 1 的方式传输,除了每一方都发送一个 JSON 对象用于带外设置信息,然后在任何有效负载数据之前加上 \n。服务端使用TL服务器名进行路由,服务端对HTTP流中的Host:进行缓冲和嗅探。

局域网发现

要查找某些内容,请在 addr= ("239.192.152.143", 6771) 上进行多播。空的 infohash 表示一般服务发现。

组播组和通用格式与 BitTorrent 的 LPD 相同,但我们不使用任何 BT 协议。

发现消息格式(windoes 风格留置权 endinngs)

HARDLINE-SEARCH * HTTP/1.1 Infohash: {Infohash} cookie: {cookie}

要宣布,请在多播或单播响应中使用此数据包:

HARDLINE-SERVICE * HTTP/1.1 端口:{Port} Infohash:{Infohash} cookie:{cookie} 标题:{title}

Cookie 是为了将您的信息与其他信息区分开来。Infohash 是 20 字节的十六进制哈希。为了稍微阻碍指纹识别,我们使用滚动代码,而不是真正的哈希:获取密钥哈希的原始字节,附加struct.pack("



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有