APRSNETCN SERVER
APRSNET.CN 自己架了一台 APRS-IS 服务器,接入协议由本站起草。客户端照老办法连,登录行里多一段账号口令。
连上这台服务器
它开在 14580 端口上,客户端照 APRS-IS 的老办法连。服务器地址由运营方公布。
APRSNETCN SERVER 是本站自己架的一台服务器,接入协议叫 APRSNET CN CONNECT,草案写在协议规范那一页。对客户端来说,连接方式和 APRS-IS 没有区别,多出来的只有登录行里那一段账号口令。
- 14580 客户端接入端口,与 APRS-IS 的自定义过滤端口同一个号码,登录行也一样。
- 8899 HTTP 台站接口,不是 APRS 端口。台站列表与单台站轨迹要令牌,健康状态不用。
- TLS 另一个端口跑 TLS,服务器配了证书才监听,没配就不开。
只想先听,passcode 填 -1 就行。要在上面发报文,得填算出来的 passcode,还要过名单那一关。算法见passcode 计算器。
APRSLocus 的副链路预置里地址是填好的,别的客户端向运营方问一句。
登录行怎么写
关键字和顺序都照 APRS-IS,末尾多出 auth 与 filter 这两段。
登录行是一行纯文本,关键字后面跟参数。只有 user 和 pass 必须填,其余可以省,顺序不能换。
-
格式
user 呼号[-SSID] pass passcode vers 软件名 版本 [auth 账号 口令] [filter 条件]auth后面两段是名单里的账号与口令,由服务器发给你;filter后面可以带空格。 -
一个只收的例子
user BG7XXX-9 pass -1 vers APRSLocus 2.1.10 auth 账号 口令 filter r/22/114/200末尾让服务器把北纬 22 度、东经 114 度两百公里内的台站推过来。
auth 必须写在 filter 前面。filter 把后面所有词都当成过滤条件,写在它后面的账号口令服务器根本看不到,连接就成了没带账号的那一种。
名单按主呼号查一条记录,SSID 共用同一条。名单里没有这一条就进不来。有效期过了,被停用,同样进不来。
-
user
呼号与 SSID。SSID 可以省,省掉等于 0,不写
-0。 -
pass
算出来的 passcode。
-1表示只收不发。 - vers 软件名与版本号,各写一个词。
- auth 名单账号与口令。名单里那一行设了口令才用得上。
- filter 服务器端过滤器,写法与APRS-IS 过滤器一样。
服务器先看登录行格式,再看呼号,然后校验 passcode,接着查名单,最后核账号口令。哪一步没过就断开,先回一行 # logresp 呼号 unverified, server APRSNETCN,再回一行原因,例如 # aprsnetcn: not authorized (auth-failed)。看到 auth-failed 就对着名单再核一遍账号口令。
名单里那一行设了口令、登录行却没带 auth,连接只收不发。认下来之后服务器回的是 # logresp 呼号 verified, server APRSNETCN,只收的那一种是 unverified。
过滤器与转发
收哪些包由 filter 决定。发进来的包在服务器上转给别的连接,路径末尾补一段 q 标记。
过滤器认 r a b m t p d f s u q 这十一个前缀,跟 APRS-IS 的过滤器是同一套。每条连接最多挂 16 条,一条不超过 200 字符。认不出的前缀整条被拒,服务器回一行 # aprsnetcn: filter rejected (unsupported:…),连接照旧。
过滤器只管这台服务器推给你什么,别的连接收什么由它们自己的过滤条件决定。
报文转给别的连接时,路径末尾补一段 qAC,登录呼号,和 APRS-IS 的做法一样。报文本身还是 TNC2 一行,回车换行结尾,一行不超过 512 字节。
服务器从 APRS-IS 拉的那一份上游只进本地库,不推给客户端。客户端之间转发的,是自己发进来的包。
收到的位置在库里留 24 小时,HTTP 台站接口按窗口、范围、时间查。参数与返回字段见台站接口说明。
与草案的三处差异
这台上线跑的版本有三处跟草案写得不一样。
- 5.5 持久化 草案要求尽量避免把报文落库。位置按功能要留 24 小时,报文正文不落盘。
-
账号口令
草案没说这两段写在哪里。实现放在登录行末尾的
auth段,不写这一段的老客户端照旧能用。 - 报文历史 草案没要求留。实现给了一个存档开关,默认关;打开后整行报文进库,默认留 72 小时,过期的在后台删掉。