WiresharkでApple AirPrintを覗き見するのだ(その2)
昨日のエントリの続き。今度は印刷のパケット見てみましょう。
iOS 側のアプリケーションは標準の「写真」で、フツーに写真を印刷してみました。
IPP のやり取りを見てみるよ
述べたとおり、印刷ジョブは IPP で行われているので、IPP の上位レイヤの HTTP のアクセス見ようかなーって思ったら、IPP サポートしてるので、なーんだってことで IPP でフィルタリング。手抜きスマヌでござります。しっかし超便利だな Wireshark。
|Time | fe80::9284:dff:fe56:a4b3 | | | | fe80::ee55:f9ff:fec3:9461 |25.878 | IPP request |IPP: IPP request | |(53833) ------------------> (631) | |25.901 | IPP response |IPP: IPP response | |(53833) <------------------ (631) | |26.537 | IPP request |IPP: IPP request | |(53834) ------------------> (631) | |26.538 | IPP response |IPP: IPP response | |(53834) <------------------ (631) | |26.682 | IPP request |IPP: IPP request | |(53835) ------------------> (631) | |26.683 | IPP response |IPP: IPP response | |(53835) <------------------ (631) | |27.986 | IPP request |IPP: IPP request | |(53834) ------------------> (631) | |27.989 | IPP request |IPP: IPP request | |(53836) ------------------> (631) | |27.996 | IPP response |IPP: IPP response | |(53834) <------------------ (631) | |27.997 | IPP response |IPP: IPP response | |(53836) <------------------ (631) | |28.012 | IPP request |IPP: IPP request …… |41.233 | IPP request |IPP: IPP request | |(53834) ------------------> (631) | |41.234 | IPP response |IPP: IPP response | |(53834) <------------------ (631) | |41.332 | IPP request |IPP: IPP request | |(53840) ------------------> (631) | |41.333 | IPP response |IPP: IPP response | |(53840) <------------------ (631) |
昨日言及し忘れたんですが、ふつーに IPv6 なんすね……。
IPP は Request - Response なプロトコルなので、当然ですけどちゃんと印刷*1 できてればちゃんと対になってるはずですが、ちゃんとなってますね。よしよし。
中身をもっと見てみよう
AirPrint で使っている IPP はバージョン 1.1 で、これは IEEE Printer Working Group の IPP Working Group*2 で策定されているので、リンク先の RFC を見ればいいわけなんですが、なにせボリュームあるので大変ですわなw 少なくとも私はめんどくさいです。
ということで小理屈を並べる前にもういきなりプロトコルを見てしまいましょう。それぞれの Request - Response の対応の意味はこんな感じになってます。
Time | Request Operation ID | 応答 | 意味 |
---|---|---|---|
25.878 | Get-Printer-Attribute(document-format-supported) | application/pdf, image/jpeg など | サポートしている文書の種類などの属性を得る |
26.537 | Validate-Job | Status-code: Successful-OK | ジョブ受付可能かを調べる |
26.682 | Get-Printer-Attribute(printer-state-reasons) | none | ステータスを調べる |
27.986 | Print-Job(image/jpeg, | job-state: Processing | 印刷ジョブを投げる |
Copies=1, | |||
fit-to-page=true, | |||
...) | |||
27.989 | Get-Printer-Attribute(printer-status-reasons) | job-state: Processing | 印刷完了まで待つ |
... | |||
41.233 | Get-Printer-Attribute(printer-status-reasons) | job-state: Complete | 印刷完了!! |
41.332 | Get-Printer-Attribute(printer-status-reasons) | none | ステータスを再度得る |
あ、あれ? PDF じゃなくて jpeg 投げてる……しかもデータダンプしてみると Exif 付きでそのまんま投げてます (興味がある人はやってみてくだせー)。
多分ですけど、document-format-supported で jpeg を受け付けてる場合はまんまで投げ、そうでない場合は iOS ビルトイン*3 の PDF エンジンを使って PDF で印刷するんじゃないかなー。
/usr/share/cups/mime 以下をいじくって image/jpeg の受付を止めちゃえば、もしかしたら PDF で投げてくるのかもしれませんが、今日はめんどうなので実験はやめておきます。気が向いたらあとで補足しておきますね。
終わりに
二回続けた割にはショボい内容ですねー。
でも、Wireshark 面白いので、あーんなことやこーんなこと、いろいろ覗いてみようかと思いますです。そういう意味でこんな適当な記事でも(私には)価値があった。
さて明日ですが、三連休はスキー旅行にいってしまうのであんまり凝ったネタは書けないなー。読書感想ネタでごまかすかもしれませんが、なんか考えます……。