ig_sig_key_version=4的到处都是。
ig_sig_key_version=5的没找到。
你知道是HMAC-SHA256。
所以,你以为是 4749bda4fc1f49372dae3d79db339ce4959cfbbe ?
那你被骗了。
You are not authorised to read all content in this post.
Please login…
sskaje's blog, study & research on technology
ig_sig_key_version=4的到处都是。
ig_sig_key_version=5的没找到。
你知道是HMAC-SHA256。
所以,你以为是 4749bda4fc1f49372dae3d79db339ce4959cfbbe ?
那你被骗了。
You are not authorised to read all content in this post.
Please login…
Xcode 8.3.3 自带的iPhone SDK不支持32位的armv7和armv7s了。想在越狱的iPhone 4s搞点小玩意儿,但是make时提示 -lcrt1.3.1.o 出错。所以研究了下怎么把老版本SDK安装上,最后发现还是只能从老版本的Xcode上提取。
Xcode 7.3.1是7系列最后一个版本,自带的SDK是 iPhoneOS9.3.sdk,Xcode 6.4是6系列最后一个版本,自带的SDK是 iPhone8.4.sdk。
提取时只需要把dmg里 Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs 下的目录copy到当前系统安装的Xcode的同一目录里,但是别用旧版本覆盖了新版本。
下载地址:https://dl.sskaje.me/ios-sdks/
下载执行
1 |
sudo tar -C /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ -xvf iPhoneOS9.3.sdk.tar.gz |
文档在:http://iphonedevwiki.net/index.php/SSH_Over_USB
提供了homebrew的安装方式。这里给一下MacPorts下的安装方式。
1 |
sudo port install opam ocaml ocaml-camlp4 |
安装过程可能会进入opam的初始化状态,如果没有的化,可以手工执行
1 |
opam init |
慢的时候不要急着回车,中间会有需要输入y确认的选项
1 |
opam install usbmux |
gandalf的新版mapping配置用的是json,跟wiki描述的已经不一致了。
手机连上电脑,直接执行gandalf
1 2 |
$ gandalf Device 30 with serial number: 00112233445566778899aabbccddeeff00112233 connected |
编辑 mapping.json,内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[ { "udid": "00112233445566778899aabbccddeeff00112233", "name": "i11", "forwarding": [ { "local_port": 10022, "device_port": 22 }, { "local_port": 19988, "device_port": 9988 } ] } ] |
其中:udid与上边直接执行命令时拿到的结果须一致;name自定义;forwarding里的local_port是本地开的端口,device_port是远程的端口。
按这份配置,我可以直接使用 ssh -p 10022 root@127.0.0.1 连接到iPhone的22端口。
执行下列命令,启动gandalf。
1 |
gandalf -m mapping.json |
08年的时候,在学校,花了点时间做了个ddns服务,不知道现在是否还活着,ddns.bitunion.org。
当时的方案,powerdns + mysql + php ui,php ui是自己做的,简单地做了个校内邮箱的校验,使用了个简单的token机制来更新记录。
这回,有个需求是需要做一个ttl < 10的ddns服务,之前所有域名都在dns.he.net上,最小ttl限制到了300,这样以来,更新的延迟特定场景下不够用。 自用DDNS的需求里,域名不会被广泛知晓并使用,否则NS服务器的压力会是个问题。
方案还是一样,powerdns + mysql,写了个最简单的http接口页面给ddclient用。
服务器是 ubuntu 17.04,公网IP 1.2.3.4.
目标域名 xxx.ddns.sskaje.me
按下列命令安装必备软件,全默认
1 |
apt install pdns-server pdns-tools pdns-backend-mysql |
考虑到现在的linux服务器,本地53端口经常被占用,所以需要修改 /etc/powerdns/pdns.conf,指定监听的IP
1 |
local-address=1.2.3.4 |
在sskaje.me的域名服务器上,添加NS记录 ddns.sskaje.me,指向IP 1.2.3.4。考虑到未来可能改IP,可以加一个A记录 ddns1.sskaje.me,指向 1.2.3.4,这样ddns.sskaje.me的NS设置成 ddns1.sskaje.me。
创建zone
1 2 3 |
# pdnsutil create-zone ddns.sskaje.me Jul 16 08:59:55 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed Creating empty zone 'ddns.sskaje.me' |
更正SOA记录
1 2 3 4 5 |
# pdnsutil add-record ddns.sskaje.me @ SOA 2592000 "dns.sskaje.me. dns.sskaje.me. 1 10800 3600 604800 3600" Jul 16 09:13:47 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed New rrset: ddns.sskaje.me. IN SOA 3600 a.misconfigured.powerdns.server hostmaster.ddns.sskaje.me 1 10800 3600 604800 3600 ddns.sskaje.me. IN SOA 2592000 dns.sskaje.me dns.sskaje.me 1 10800 3600 604800 3600 |
添加 xxx.ddns.sskaje.me,设置ttl=10
1 2 3 4 |
# pdnsutil add-record ddns.sskaje.me xxx A 10 127.0.0.1 Jul 16 09:14:55 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed New rrset: xxx.ddns.sskaje.me. IN A 10 127.0.0.1 |
DynDNS的更新接口参数类似:
1 |
/nic/update?system=dyndns&hostname=xxx.ddns.sskaje.me&myip=4.3.2.1 |
认证使用 http basic auth 完成的。
所以一个简单的服务端脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
<?php $auth = [ 'xxx.ddns.sskaje.me' => 'This.15.p4ssw0rd', ]; if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) { die('badauth'); } if (!isset($auth[$_SERVER['PHP_AUTH_USER']])) { die('badauth'); } if ($auth[$_SERVER['PHP_AUTH_USER']] != $_SERVER['PHP_AUTH_PW']) { die('badauth'); } if (!isset($_GET['hostname'])) { die('badauth'); } if ($_GET['hostname'] != $_SERVER['PHP_AUTH_USER']) { die('badauth'); } $db = new mysqli('localhost', 'root', '123123123', 'pdns'); $db->set_charset('utf8'); try { $db->autocommit(0); $result = $db->query("SELECT * FROM records WHERE name='{$_SERVER['PHP_AUTH_USER']}' FOR UPDATE "); if (!$result->num_rows) { throw new Exception('nohost'); } $record = $result->fetch_assoc(); if ($record['type'] != 'A') { throw new Exception('nohost'); } if (!isset($_GET['myip'])) { $ip = get_client_ip(); } else { $ip = long2ip(ip2long($_GET['myip'])); } if ($ip == $record['content']) { throw new Exception('nochg'); } $db->query("UPDATE records SET content='{$ip}' WHERE id={$record['id']}"); $db->commit(); echo "good {$ip}\n"; } catch (Exception $e) { $db->rollback(); echo $e->getMessage() . "\n"; } finally { $db->close(); } function get_client_ip() { if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { return $_SERVER['HTTP_CF_CONNECTING_IP']; } return $_SERVER['REMOTE_ADDR']; } |