マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

VPN

そのまま流せば良かったんだ

当然のことに気付かなかったが、端末から受け取るレイヤーと外に送信するレイヤーが違っても、ヘッダだけちょっと弄ってあとはそのままで良かった感じ。ヘッダをちょっと弄るといってもTCPだと死ねそうだけどね。それでDNSの外に向かうパケットは処理で来て…

もう続かないかもしれないのでVPNService使ったコードを晒します

VPNServiceを使ったソースコードを公開します。起動するとネットに繋がらなくなるけど、端末から飛んでいくパケットが途中まで(現在最初のパケットのみ)見れます。VPN関係のライブラリの使い方が正しいか不明。Android 4.0からが対象。また、AndroidManifest…

IPヘッダの解析にByteBufferを使ってみた

前回はbyte[]でやってたけど、ByteBufferを使うようにしてみた。ByteBufferだとgetShortがあるのでちょっと楽できた public void set(ByteBuffer packet){ int first = packet.get(); version = (first >> 4) & 0x0F; headerLength = first & 0x0F; serviceT…

うお、IPヘッダクラス書き直し!

byte[]でやってたけどByteBufferの方が良さそう。intとかshortでも値を取れるし、先頭から順番にアクセスしていくからポジションが変わるのもよい。何よりビット演算が減らせるのは嬉しい。でも微妙に残ってしまうんだよな

相手からの応答は来たけど...

VpnService使ったAndroid端末とのやり取りはIP層からのやり取りで、接続先とのやり取りはTCP上かUDP上(両方ともヘッダ無し)のやり取りみたいね。だから、接続先からの応答はTCPヘッダ又はUDPヘッダとIPヘッダを付与してからAndroid端末に渡すっぽい。そしてA…

DNS...

VpnServiceを使って、Android端末からのパケットは受けとることができた。IPパケットを取得、その上にはUDPで送信先ポート番号は53!DNSだった。それをVpnServiceでprotectしたDatagramChannelで送信。これで応答が返ってくると思いきや無反応...なんてこっ…

IPヘッダを表すクラスを作成してみた

VpnServiceを使ってIPパケットを取得できたのでIPヘッダを表すクラスを作成した。読み込んだパケットをsetする。ちょっと長くなってしまった。最初の来るパケットはUDPっぽいので次はUDPヘッダクラスを作成する package net.d_kami; /** * IPv4ヘッダを表す…

VpnServiceで見れるのは...

4.0から導入されたVpnServiceで見れるレイヤーはIPからっぽいな。どこかの情報でEthernetフレームを取得できてそうなことが書いてあった気がしたがそんなことはないようだ?Ethernetフレームタイプを表示させたら見事IPアドレスの一部だった