dodaの日記: TTProxy の IPv6 対応調査
TTProxy の IPv6 対応について調べ始めたとか言っておきながら諸般の事情で全然進んでいないので、とりあえず現在判っている事をまとめて見る。
- コマンドライン、および設定ダイアログで、IPv6 raw address でのプロキシの指定を受け付けない。
- WSAAsyncGetAddrInfo をフックするための TTX インタフェースが無い。
- 名前解決関連では WSAAsyncGetHostByName のみをフックしている。
- 内部での名前解決で gethostbyname を使っている。
- アドレスファミリが AF_INET の時のみ処理を行うようになっている部分がある。
# まだ漏れがあるかも
まず 1 は maya さんが既に対応済み。
次に 2 だが、これは Tera Term 本体の IPv6 対応で名前解決時使う関数が WSAAsyncGetHostByName から WSAAsyncGetAddrInfo に変わったのだが、TTX でフック出来るようにしていなかったという物。
これも既に対応済み。
次に 3。
前述のように名前解決は WSAAsyncGetAddrInfo を使うように変わっているのだが、WSAAsyncGetHostByName をフックするようになっている。
WSAAsyncGetAddrInfo は今までフック出来なかったのでしょうがないのだが、2 でフック出来るようにしたので、これを使うようにすべき。
ただ、現状では名前解決時のフックが出来ていないのにちゃんと動いている。
もしかしたら名前解決時のフック自体が必要ないのかも。
# 気づいていないだけで問題は出ているのかもしれないが
次に 4 だが、プロキシへの接続のための名前解決で gethostbyname を使っているため、プロキシのホスト名で IPv6 アドレスが得られない。
ここも getaddrinfo を使うように書き換える必要がある。
最後に 5 だが、接続時にアドレスファミリーが AF_INET 以外の時は処理を行わないようになっている。
接続先実ホストがIPv6の時にプロキシを使わずに直接接続してしまうのはおそらくこれが原因。
AF_INET6 の時も適切な処理を行う必要あり。
今のところ気が付いているのはこれだけ。
他にも有るかもしれないけれど、多分修正している内に気付くだろう。
TTProxy の IPv6 対応調査 More ログイン