74
AirPrintで遊んでみた Hiroyuki-Fujikawa. (@cqa02303) 12526日土曜日

Air printで遊んでみた

Embed Size (px)

DESCRIPTION

5/26 iphone_dev_jp 東京iPhone/Mac勉強会で発表したものですhttp://atnd.org/events/28693

Citation preview

Page 1: Air printで遊んでみた

AirPrintで遊んでみた Hiroyuki-Fujikawa. (@cqa02303)

12年5月26日土曜日

Page 2: Air printで遊んでみた

今日は レベルの低い 話をします

おわび

12年5月26日土曜日

Page 3: Air printで遊んでみた

• AirPrintとは?

• iPhoneから簡単に印刷できる

• メール・Safari・地図・etc...

12年5月26日土曜日

Page 4: Air printで遊んでみた

• テスト用プリントアプリ

• 「Printer Simulator」

• Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Applications

12年5月26日土曜日

Page 5: Air printで遊んでみた

• AirPrintとは?

• Bonjour で プリンタ を特定

• プリント内容を転送するプロトコル

12年5月26日土曜日

Page 6: Air printで遊んでみた

• iOS SDK の AirPrint 対応

(略)

12年5月26日土曜日

Page 7: Air printで遊んでみた

BONJOUR?

12年5月26日土曜日

Page 8: Air printで遊んでみた

• Bonjourの裏側

• http://www.apple.com/support/bonjour/

• dns-sd (status確認コマンド)

occidentale:MacOS fujikawa$ dns-sddns-sd -E (Enumerate recommended registration domains)dns-sd -F (Enumerate recommended browsing domains)dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...] (Register a service)dns-sd -B <Type> <Domain> (Browse for services instances)dns-sd -L <Name> <Type> <Domain> (Look up a service instance)dns-sd -P <Name> <Type> <Domain> <Port> <Host> <IP> [<TXT>...] (Proxy)dns-sd -q <name> <rrtype> <rrclass> (Generic query for any record type)dns-sd -Z <Type> <Domain> (Output results in Zone File format)dns-sd -G v4/v6/v4v6 <name> (Get address information for hostname)dns-sd -V (Get version of currently running daemon / system service)

12年5月26日土曜日

Page 9: Air printで遊んでみた

• Bonjourの情報を見る

• dns-sd -B _ipp._tcp

occidentale:~ fujikawa$ dns-sd -B _ipp._tcpBrowsing for _ipp._tcpDATE: ---Wed 23 May 2012---20:16:26.974 ...STARTING...Timestamp A/R Flags if Domain Service Type Instance Name20:16:26.976 Add 3 1 local. _ipp._tcp. Simulated InkJet @ 腰果20:16:26.976 Add 3 1 local. _ipp._tcp. Simulated 2-Sided InkJet @ 腰果20:16:26.976 Add 3 1 local. _ipp._tcp. Simulated Laser @ 腰果20:16:26.976 Add 3 1 local. _ipp._tcp. Simulated Color Laser @ 腰果20:16:26.976 Add 2 1 local. _ipp._tcp. Save Original to Simulator @ 腰果

12年5月26日土曜日

Page 10: Air printで遊んでみた

• Bonjourの情報を見る

• dns-sd -L (プリンタ名) _ipp._tcp

occidentale:~ fujikawa$ dns-sd -L "Save Original to Simulator @ 腰果" _ipp._tcp

Lookup Save Original to Simulator @ 腰果._ipp._tcp.local

DATE: ---Wed 23 May 2012---20:18:27.962 ...STARTING...20:18:28.153 Save\032Original\032to\032Simulator\032@\032腰果._ipp._tcp.local. can be reached at occidentale.local.:8632 (interface 1)

txtvers=1 qtotal=1 rp=printers/save ty=Save\ Original adminurl=http://%E8%85%B0%E6%9E%9C:8632/ note=腰果 priority=0 product=Save\ Original

Transparent=T Binary=T Color=T Duplex=F Staple=F Copies=T Collate=F Punch=F Bind=F Sort=F Scan=F Fax=F pdl=image/jpeg,application/pdf,image/png,image/urf URF=W8,SRGB24,ADOBERGB24-48,CP255,IS1-2-3-4-5,OB1-8,FN3-4-5-6-7-8-9-10,PQ3-4-5,RS300-600,V1.2 UUID=f41759d5-d406-3efa-70e6-dafd6383af5b

12年5月26日土曜日

Page 11: Air printで遊んでみた

• 情報を整理してみる

occidentale:~ fujikawa$ dns-sd -L "Save Original to Simulator @ 腰果" _ipp._tcp

Lookup Save Original to Simulator @ 腰果._ipp._tcp.local

DATE: ---Wed 23 May 2012---20:18:27.962 ...STARTING...20:18:28.153 Save\032Original\032to\032Simulator\032@\032腰果._ipp._tcp.local. can be reached at occidentale.local.:8632 (interface 1)

txtvers=1 qtotal=1 rp=printers/save ty=Save\ Original adminurl=http://%E8%85%B0%E6%9E%9C:8632/ note=腰果 priority=0 product=Save\ Original

Transparent=T Binary=T Color=T Duplex=F Staple=F Copies=T Collate=F Punch=F Bind=F Sort=F Scan=F Fax=F pdl=image/jpeg,application/pdf,image/png,image/urf URF=W8,SRGB24,ADOBERGB24-48,CP255,IS1-2-3-4-5,OB1-8,FN3-4-5-6-7-8-9-10,PQ3-4-5,RS300-600,V1.2 UUID=f41759d5-d406-3efa-70e6-dafd6383af5b

12年5月26日土曜日

Page 12: Air printで遊んでみた

• プリンタ名、アクセス手段

occidentale:~ fujikawa$ dns-sd -L "Save Original to Simulator @ 腰果" _ipp._tcp

Lookup Save Original to Simulator @ 腰果._ipp._tcp.local

DATE: ---Wed 23 May 2012---20:18:27.962 ...STARTING...20:18:28.153 Save\032Original\032to\032Simulator\032@\032腰果._ipp._tcp.local. can be reached at occidentale.local.:8632

(interface 1) txtvers=1 qtotal=1 rp=printers/save ty=Save\ Original adminurl=http://%E8%85%B0%E6%9E%9C:8632/ note=腰果 priority=0 product=Save\ Original

Transparent=T Binary=T Color=T Duplex=F Staple=F Copies=T Collate=F Punch=F Bind=F Sort=F Scan=F Fax=F pdl=image/jpeg,application/pdf,image/png,image/urf URF=W8,SRGB24,ADOBERGB24-48,CP255,IS1-2-3-4-5,OB1-8,FN3-4-5-6-7-8-9-10,PQ3-4-5,RS300-600,V1.2 UUID=f41759d5-d406-3efa-70e6-dafd6383af5b

12年5月26日土曜日

Page 13: Air printで遊んでみた

• サービスインスタンス

occidentale:~ fujikawa$ dns-sd -L "Save Original to Simulator @ 腰果" _ipp._tcp

Lookup Save Original to Simulator @ 腰果._ipp._tcp.local

DATE: ---Wed 23 May 2012---20:18:27.962 ...STARTING...20:18:28.153 Save\032Original\032to\032Simulator\032@\032腰果._ipp._tcp.local. can be reached at occidentale.local.:8632

(interface 1) txtvers=1 qtotal=1 rp=printers/save ty=Save\ Original adminurl=http://%E8%85%B0%E6%9E%9C:8632/ note=腰果

priority=0 product=Save\ Original Transparent=T Binary=T Color=T Duplex=F Staple=F Copies=T Collate=F Punch=F Bind=F Sort=F Scan=F Fax=F pdl=image/jpeg,application/pdf,image/png,image/urf URF=W8,SRGB24,ADOBERGB24-48,CP255,IS1-2-3-4-5,OB1-8,FN3-4-5-6-7-8-9-10,PQ3-4-5,RS300-600,V1.2 UUID=f41759d5-d406-3efa-70e6-dafd6383af5b

12年5月26日土曜日

Page 14: Air printで遊んでみた

• txtvers=1

• qtotal=1

•rp=printers/save

• ty=Save\ Original

•adminurl=http://%E8%85%B0%E6%9E%9C:8632/

• note=腰果

• priority=0

• product=Save\ Original

12年5月26日土曜日

Page 15: Air printで遊んでみた

•Transparent=T Binary=T Color=T

•Duplex=F Staple=F Copies=T•Collate=F Punch=F Bind=F

Sort=F

•Scan=F Fax=F

12年5月26日土曜日

Page 16: Air printで遊んでみた

•pdl=

•image/jpeg,

•application/pdf,•image/png,

•image/urf

12年5月26日土曜日

Page 17: Air printで遊んでみた

• URF=

• W8,

• SRGB24,

• ADOBERGB24-48,

• CP255,

• IS1-2-3-4-5,

• OB1-8,

• FN3-4-5-6-7-8-9-10,

• PQ3-4-5,

• RS300-600,

• V1.2

12年5月26日土曜日

Page 18: Air printで遊んでみた

•UUID=

•f41759d5-d406-3efa-70e6-dafd6383af5b

12年5月26日土曜日

Page 19: Air printで遊んでみた

• だいたいわかりましたね?

12年5月26日土曜日

Page 20: Air printで遊んでみた

PRINTERを偽装する

12年5月26日土曜日

Page 21: Air printで遊んでみた

• 自作アプリをmDNSに登録する

• 関連するサンプルコード• BonjourWeb

• SimpleNetworkStreams

• NSNetService Class

• -setTXTRecordData:

• -publishWithOptions:

12年5月26日土曜日

Page 22: Air printで遊んでみた

• _ipp._tcp → Bonjour Printer

• AirPrint

• → サブカテゴリ: universalが必要

12年5月26日土曜日

Page 23: Air printで遊んでみた

• サブカテゴリ?

NSNetService Class Reference- (id)initWithDomain:(NSString *)domain type:(NSString *)type name:(NSString *)name port:(int)port

使用例)[[NSNetService alloc] initWithDomain:@"local." type:@"_http._tcp." name:@"my web server" port:port];

12年5月26日土曜日

Page 24: Air printで遊んでみた

• プログラムの文字リソースを推定する

• 文字リソース @”hogehoge”

• 実行fileに保存されている可能性大

12年5月26日土曜日

Page 25: Air printで遊んでみた

• プログラムの文字リソースを推定する

• strings (実行ファイル) | grep “hogehoge”

12年5月26日土曜日

Page 26: Air printで遊んでみた

• 実行ファイルの場所

• Printer Simulator.app/Contents/MacOS

• Printer Simulator

• PrinterSimulatorServer

12年5月26日土曜日

Page 27: Air printで遊んでみた

• @”_ipp._tcp,_universal” …かな?

occidentale:MacOS fujikawa$ strings PrinterSimulatorServer | grep _ipp._tcp_ipp._tcp,_cups_ipp._tcp,_universal_ipp._tcp

12年5月26日土曜日

Page 28: Air printで遊んでみた

• 試してみる

12年5月26日土曜日

Page 29: Air printで遊んでみた

• Bonjourに登録する基本情報

self.netService = [[NSNetService alloc] initWithDomain:@"local." type:@"_ipp._tcp.,_universal" name:@"てすとぷりんた" port:port];

12年5月26日土曜日

Page 30: Air printで遊んでみた

• サービスインスタンスを登録する

NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:10];

[dictionary setObject:@"printers/save" forKey:@"rp"];[dictionary setObject:@"Save Original" forKey:@"ty"];[dictionary setObject:@"1" forKey:@"txtvers"];

・・・

[self.netService setTXTRecordData:[NSNetService dataFromTXTRecordDictionary:dictionary]];

12年5月26日土曜日

Page 31: Air printで遊んでみた

• サービスを登録・公開する

[self.netService publishWithOptions:NSNetServiceNoAutoRename];

12年5月26日土曜日

Page 32: Air printで遊んでみた

• 表示された!

12年5月26日土曜日

Page 33: Air printで遊んでみた

• まとめ

• @”_ipp._tcp” → Bonjour Printer

• @”_ipp._tcp,universal” → AirPrint Printer

12年5月26日土曜日

Page 34: Air printで遊んでみた

PRINTER SERVER

12年5月26日土曜日

Page 35: Air printで遊んでみた

• 選べない…

• 何が起きているかダンプで確認

12年5月26日土曜日

Page 36: Air printで遊んでみた

• ifconfig -a

• ネットワークインタフェースを知る• tcpdump -x -X -s 20480 -i (インタフェース) port (ポート番号)

• パケット確認

12年5月26日土曜日

Page 37: Air printで遊んでみた

• 出力例

nucifera:~ root# tcpdump -x -X -s 20480 -i en1 port 8632tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on en1, link-type EN10MB (Ethernet), capture size 20480 bytes11:06:27.025902 IP iphone4s.59584 > nucifera.8632: Flags [S], seq 401995709, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1366143176 ecr 0,sackOK,eol], length 0! 0x0000: 4500 0040 dc29 4000 4006 8650 c0a8 2bea E..@.)@[email protected]..+.! 0x0010: c0a8 2b03 e8c0 21b8 17f5 f7bd 0000 0000 ..+...!.........! 0x0020: b002 ffff 425e 0000 0204 05b4 0103 0304 ....B^..........! 0x0030: 0101 080a 516d b0c8 0000 0000 0402 0000 ....Qm..........11:06:27.026208 IP nucifera.8632 > iphone4s.59584: Flags [S.], seq 834319381, ack 401995710, win 65535, options [mss 1460,nop,wscale 1,nop,nop,TS val 627011836 ecr 1366143176,sackOK,eol], length 0! 0x0000: 4500 0040 da70 4000 4006 8809 c0a8 2b03 [email protected]@.@.....+.! 0x0010: c0a8 2bea 21b8 e8c0 31ba b415 17f5 f7be ..+.!...1.......! 0x0020: b012 ffff c624 0000 0204 05b4 0103 0301 .....$..........! 0x0030: 0101 080a 255f 70fc 516d b0c8 0402 0000 ....%_p.Qm......11:06:27.031403 IP iphone4s.59584 > nucifera.8632: Flags [.], ack 1, win 8235, options [nop,nop,TS val 1366143181 ecr 627011836], length 0! 0x0000: 4500 0034 1e4d 4000 4006 4439 c0a8 2bea E..4.M@[email protected]..+.! 0x0010: c0a8 2b03 e8c0 21b8 17f5 f7be 31ba b416 ..+...!.....1...! 0x0020: 8010 202b e5bf 0000 0101 080a 516d b0cd ...+........Qm..! 0x0030: 255f 70fc %_p.

12年5月26日土曜日

Page 38: Air printで遊んでみた

• リクエスト部分

• HTTPヘッダ?

• BODYがバイナリ?

09:11:53.565515 IP6 localhost.52819 > localhost.8632: Flags [P.], seq 1:153, ack 1, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 152! 0x0000: 6000 0000 00b8 0640 0000 0000 0000 0000 `......@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 ce53 21b8 4e3f 4bbf .........S!.N?K.! 0x0030: 5660 9cae 8018 ffff 00c0 0000 0101 080a V`..............! 0x0040: 17a8 e617 17a8 e617 504f 5354 202f 7072 ........POST./pr! 0x0050: 696e 7465 7273 2f73 6176 6520 4854 5450 inters/save.HTTP! 0x0060: 2f31 2e31 0d0a 436f 6e74 656e 742d 4c65 /1.1..Content-Le! 0x0070: 6e67 7468 3a20 3435 380d 0a43 6f6e 7465 ngth:.458..Conte! 0x0080: 6e74 2d54 7970 653a 2061 7070 6c69 6361 nt-Type:.applica! 0x0090: 7469 6f6e 2f69 7070 0d0a 486f 7374 3a20 tion/ipp..Host:.! 0x00a0: 6e75 6369 6665 7261 2e6c 6f63 616c 0d0a nucifera.local..! 0x00b0: 5573 6572 2d41 6765 6e74 3a20 4355 5053 User-Agent:.CUPS! 0x00c0: 2f31 2e35 2e31 0d0a 4578 7065 6374 3a20 /1.5.1..Expect:.! 0x00d0: 3130 302d 636f 6e74 696e 7565 0d0a 0d0a 100-continue....09:11:53.565534 IP6 localhost.52819 > localhost.8632: Flags [P.], seq 153:611, ack 1, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 458! 0x0000: 6000 0000 01ea 0640 0000 0000 0000 0000 `......@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 ce53 21b8 4e3f 4c57 .........S!.N?LW! 0x0030: 5660 9cae 8018 ffff 01f2 0000 0101 080a V`..............! 0x0040: 17a8 e617 17a8 e617 0101 000b 0000 0001 ................! 0x0050: 0147 0012 6174 7472 6962 7574 6573 2d63 .G..attributes-c! 0x0060: 6861 7273 6574 0005 7574 662d 3848 001b harset..utf-8H..! 0x0070: 6174 7472 6962 7574 6573 2d6e 6174 7572 attributes-natur! 0x0080: 616c 2d6c 616e 6775 6167 6500 026a 6145 al-language..jaE! 0x0090: 000b 7072 696e 7465 722d 7572 6900 2869 ..printer-uri.(i! 0x00a0: 7070 3a2f 2f6e 7563 6966 6572 612e 6c6f pp://nucifera.lo! 0x00b0: 6361 6c2e 3a38 3633 322f 7072 696e 7465 cal.:8632/printe! 0x00c0: 7273 2f73 6176 6542 0014 7265 7175 6573 rs/saveB..reques! 0x00d0: 7469 6e67 2d75 7365 722d 6e61 6d65 0008 ting-user-name..! 0x00e0: 6675 6a69 6b61 7761 4400 1472 6571 7565 fujikawaD..reque! 0x00f0: 7374 6564 2d61 7474 7269 6275 7465 7300 sted-attributes.! 0x0100: 1261 7574 682d 696e 666f 2d72 6571 7569 .auth-info-requi! 0x0110: 7265 6444 0000 000a 6465 7669 6365 2d75 redD....device-u! 0x0120: 7269 4400 0000 126d 6172 6b65 722d 6368 riD....marker-ch! 0x0130: 616e 6765 2d74 696d 6544 0000 000d 6d61 ange-timeD....ma! 0x0140: 726b 6572 2d63 6f6c 6f72 7344 0000 0012 rker-colorsD....! 0x0150: 6d61 726b 6572 2d68 6967 682d 6c65 7665 marker-high-leve! 0x0160: 6c73 4400 0000 0d6d 6172 6b65 722d 6c65 lsD....marker-le

12年5月26日土曜日

Page 39: Air printで遊んでみた

• ダンプ結果

• 一般的な HTTP 通信

• Bonjourで指示したBaseURL (adminurl)

• /printers/save (rp)

• HTTP BODY は IPP

• IPP = Internet Printing Protocol

12年5月26日土曜日

Page 40: Air printで遊んでみた

• IPPのパケット構造

12年5月26日土曜日

Page 41: Air printで遊んでみた

• RFC 2910 Internet Printing Protocol/1.1: Encoding and Transport

• http://tools.ietf.org/html/rfc2910

HTTP Stream

HTTP Body

HTTP Header

IPP カプセル

Data

Header

Attributes

Attribute End

12年5月26日土曜日

Page 42: Air printで遊んでみた

• IPPのパケット構造

----------------------------------------------- | version-number | 2 bytes - required ----------------------------------------------- | operation-id (request) | | or | 2 bytes - required | status-code (response) | ----------------------------------------------- | request-id | 4 bytes - required ----------------------------------------------------------- | tag (delimiter-tag or value-tag) | 1 byte | ----------------------------------------------- |-0 or more | empty or rest of attribute | x bytes | ----------------------------------------------------------- | end-of-attributes-tag | 1 byte - required ----------------------------------------------- | data | y bytes - optional -----------------------------------------------

12年5月26日土曜日

Page 43: Air printで遊んでみた

• IPPを読む

• ver = 1.1

• コマンド = Get

Printer Attributes

• シーケンス = 1

09:11:53.565534 IP6 localhost.52819 > localhost.8632: Flags [P.], seq 153:611, ack 1, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 458! 0x0000: 6000 0000 01ea 0640 0000 0000 0000 0000 `......@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 ce53 21b8 4e3f 4c57 .........S!.N?LW! 0x0030: 5660 9cae 8018 ffff 01f2 0000 0101 080a V`..............! 0x0040: 17a8 e617 17a8 e617 0101 000b 0000 0001 ................! 0x0050: 0147 0012 6174 7472 6962 7574 6573 2d63 .G..attributes-c! 0x0060: 6861 7273 6574 0005 7574 662d 3848 001b harset..utf-8H..! 0x0070: 6174 7472 6962 7574 6573 2d6e 6174 7572 attributes-natur! 0x0080: 616c 2d6c 616e 6775 6167 6500 026a 6145 al-language..jaE! 0x0090: 000b 7072 696e 7465 722d 7572 6900 2869 ..printer-uri.(i! 0x00a0: 7070 3a2f 2f6e 7563 6966 6572 612e 6c6f pp://nucifera.lo! 0x00b0: 6361 6c2e 3a38 3633 322f 7072 696e 7465 cal.:8632/printe! 0x00c0: 7273 2f73 6176 6542 0014 7265 7175 6573 rs/saveB..reques! 0x00d0: 7469 6e67 2d75 7365 722d 6e61 6d65 0008 ting-user-name..! 0x00e0: 6675 6a69 6b61 7761 4400 1472 6571 7565 fujikawaD..reque! 0x00f0: 7374 6564 2d61 7474 7269 6275 7465 7300 sted-attributes.! 0x0100: 1261 7574 682d 696e 666f 2d72 6571 7569 .auth-info-requi! 0x0110: 7265 6444 0000 000a 6465 7669 6365 2d75 redD....device-u! 0x0120: 7269 4400 0000 126d 6172 6b65 722d 6368 riD....marker-ch! 0x0130: 616e 6765 2d74 696d 6544 0000 000d 6d61 ange-timeD....ma! 0x0140: 726b 6572 2d63 6f6c 6f72 7344 0000 0012 rker-colorsD....! 0x0150: 6d61 726b 6572 2d68 6967 682d 6c65 7665 marker-high-leve! 0x0160: 6c73 4400 0000 0d6d 6172 6b65 722d 6c65 lsD....marker-le! 0x0170: 7665 6c73 4400 0000 116d 6172 6b65 722d velsD....marker-! 0x0180: 6c6f 772d 6c65 7665 6c73 4400 0000 0e6d low-levelsD....m! 0x0190: 6172 6b65 722d 6d65 7373 6167 6544 0000 arker-messageD..! 0x01a0: 000c 6d61 726b 6572 2d6e 616d 6573 4400 ..marker-namesD.! 0x01b0: 0000 0c6d 6172 6b65 722d 7479 7065 7344 ...marker-typesD! 0x01c0: 0000 0010 7072 696e 7465 722d 636f 6d6d ....printer-comm! 0x01d0: 616e 6473 4400 0000 1570 7269 6e74 6572 andsD....printer! 0x01e0: 2d73 7461 7465 2d72 6561 736f 6e73 4400 -state-reasonsD.! 0x01f0: 0000 0d70 7269 6e74 6572 2d73 7461 7465 ...printer-state! 0x0200: 4400 0000 0c70 7269 6e74 6572 2d74 7970 D....printer-typ! 0x0210: 6503 e.

12年5月26日土曜日

Page 44: Air printで遊んでみた

• IPPを読む

• 0x01:オペレーション開始

09:11:53.565534 IP6 localhost.52819 > localhost.8632: Flags [P.], seq 153:611, ack 1, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 458! 0x0000: 6000 0000 01ea 0640 0000 0000 0000 0000 `......@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 ce53 21b8 4e3f 4c57 .........S!.N?LW! 0x0030: 5660 9cae 8018 ffff 01f2 0000 0101 080a V`..............! 0x0040: 17a8 e617 17a8 e617 0101 000b 0000 0001 ................! 0x0050: 0147 0012 6174 7472 6962 7574 6573 2d63 .G..attributes-c! 0x0060: 6861 7273 6574 0005 7574 662d 3848 001b harset..utf-8H..! 0x0070: 6174 7472 6962 7574 6573 2d6e 6174 7572 attributes-natur! 0x0080: 616c 2d6c 616e 6775 6167 6500 026a 6145 al-language..jaE! 0x0090: 000b 7072 696e 7465 722d 7572 6900 2869 ..printer-uri.(i! 0x00a0: 7070 3a2f 2f6e 7563 6966 6572 612e 6c6f pp://nucifera.lo! 0x00b0: 6361 6c2e 3a38 3633 322f 7072 696e 7465 cal.:8632/printe! 0x00c0: 7273 2f73 6176 6542 0014 7265 7175 6573 rs/saveB..reques! 0x00d0: 7469 6e67 2d75 7365 722d 6e61 6d65 0008 ting-user-name..! 0x00e0: 6675 6a69 6b61 7761 4400 1472 6571 7565 fujikawaD..reque! 0x00f0: 7374 6564 2d61 7474 7269 6275 7465 7300 sted-attributes.! 0x0100: 1261 7574 682d 696e 666f 2d72 6571 7569 .auth-info-requi! 0x0110: 7265 6444 0000 000a 6465 7669 6365 2d75 redD....device-u! 0x0120: 7269 4400 0000 126d 6172 6b65 722d 6368 riD....marker-ch! 0x0130: 616e 6765 2d74 696d 6544 0000 000d 6d61 ange-timeD....ma! 0x0140: 726b 6572 2d63 6f6c 6f72 7344 0000 0012 rker-colorsD....! 0x0150: 6d61 726b 6572 2d68 6967 682d 6c65 7665 marker-high-leve! 0x0160: 6c73 4400 0000 0d6d 6172 6b65 722d 6c65 lsD....marker-le! 0x0170: 7665 6c73 4400 0000 116d 6172 6b65 722d velsD....marker-! 0x0180: 6c6f 772d 6c65 7665 6c73 4400 0000 0e6d low-levelsD....m! 0x0190: 6172 6b65 722d 6d65 7373 6167 6544 0000 arker-messageD..! 0x01a0: 000c 6d61 726b 6572 2d6e 616d 6573 4400 ..marker-namesD.! 0x01b0: 0000 0c6d 6172 6b65 722d 7479 7065 7344 ...marker-typesD! 0x01c0: 0000 0010 7072 696e 7465 722d 636f 6d6d ....printer-comm! 0x01d0: 616e 6473 4400 0000 1570 7269 6e74 6572 andsD....printer! 0x01e0: 2d73 7461 7465 2d72 6561 736f 6e73 4400 -state-reasonsD.! 0x01f0: 0000 0d70 7269 6e74 6572 2d73 7461 7465 ...printer-state! 0x0200: 4400 0000 0c70 7269 6e74 6572 2d74 7970 D....printer-typ! 0x0210: 6503 e.

12年5月26日土曜日

Page 45: Air printで遊んでみた

• IPPを読む

• 0x47: charset

• length =12

• attributes-charset

• length = 5

• utf-8

09:11:53.565534 IP6 localhost.52819 > localhost.8632: Flags [P.], seq 153:611, ack 1, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 458! 0x0000: 6000 0000 01ea 0640 0000 0000 0000 0000 `......@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 ce53 21b8 4e3f 4c57 .........S!.N?LW! 0x0030: 5660 9cae 8018 ffff 01f2 0000 0101 080a V`..............! 0x0040: 17a8 e617 17a8 e617 0101 000b 0000 0001 ................! 0x0050: 0147 0012 6174 7472 6962 7574 6573 2d63 .G..attributes-c! 0x0060: 6861 7273 6574 0005 7574 662d 3848 001b harset..utf-8H..! 0x0070: 6174 7472 6962 7574 6573 2d6e 6174 7572 attributes-natur! 0x0080: 616c 2d6c 616e 6775 6167 6500 026a 6145 al-language..jaE! 0x0090: 000b 7072 696e 7465 722d 7572 6900 2869 ..printer-uri.(i! 0x00a0: 7070 3a2f 2f6e 7563 6966 6572 612e 6c6f pp://nucifera.lo! 0x00b0: 6361 6c2e 3a38 3633 322f 7072 696e 7465 cal.:8632/printe! 0x00c0: 7273 2f73 6176 6542 0014 7265 7175 6573 rs/saveB..reques! 0x00d0: 7469 6e67 2d75 7365 722d 6e61 6d65 0008 ting-user-name..! 0x00e0: 6675 6a69 6b61 7761 4400 1472 6571 7565 fujikawaD..reque! 0x00f0: 7374 6564 2d61 7474 7269 6275 7465 7300 sted-attributes.! 0x0100: 1261 7574 682d 696e 666f 2d72 6571 7569 .auth-info-requi! 0x0110: 7265 6444 0000 000a 6465 7669 6365 2d75 redD....device-u! 0x0120: 7269 4400 0000 126d 6172 6b65 722d 6368 riD....marker-ch! 0x0130: 616e 6765 2d74 696d 6544 0000 000d 6d61 ange-timeD....ma! 0x0140: 726b 6572 2d63 6f6c 6f72 7344 0000 0012 rker-colorsD....! 0x0150: 6d61 726b 6572 2d68 6967 682d 6c65 7665 marker-high-leve! 0x0160: 6c73 4400 0000 0d6d 6172 6b65 722d 6c65 lsD....marker-le! 0x0170: 7665 6c73 4400 0000 116d 6172 6b65 722d velsD....marker-! 0x0180: 6c6f 772d 6c65 7665 6c73 4400 0000 0e6d low-levelsD....m! 0x0190: 6172 6b65 722d 6d65 7373 6167 6544 0000 arker-messageD..! 0x01a0: 000c 6d61 726b 6572 2d6e 616d 6573 4400 ..marker-namesD.! 0x01b0: 0000 0c6d 6172 6b65 722d 7479 7065 7344 ...marker-typesD! 0x01c0: 0000 0010 7072 696e 7465 722d 636f 6d6d ....printer-comm! 0x01d0: 616e 6473 4400 0000 1570 7269 6e74 6572 andsD....printer! 0x01e0: 2d73 7461 7465 2d72 6561 736f 6e73 4400 -state-reasonsD.! 0x01f0: 0000 0d70 7269 6e74 6572 2d73 7461 7465 ...printer-state! 0x0200: 4400 0000 0c70 7269 6e74 6572 2d74 7970 D....printer-typ! 0x0210: 6503 e.

12年5月26日土曜日

Page 46: Air printで遊んでみた

• IPPを読む

• 0x48: natural-language

• length =0x1b(27)

• attributes-natural-language

• length = 2

• ja

09:11:53.565534 IP6 localhost.52819 > localhost.8632: Flags [P.], seq 153:611, ack 1, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 458! 0x0000: 6000 0000 01ea 0640 0000 0000 0000 0000 `......@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 ce53 21b8 4e3f 4c57 .........S!.N?LW! 0x0030: 5660 9cae 8018 ffff 01f2 0000 0101 080a V`..............! 0x0040: 17a8 e617 17a8 e617 0101 000b 0000 0001 ................! 0x0050: 0147 0012 6174 7472 6962 7574 6573 2d63 .G..attributes-c! 0x0060: 6861 7273 6574 0005 7574 662d 3848 001b harset..utf-8H..! 0x0070: 6174 7472 6962 7574 6573 2d6e 6174 7572 attributes-natur! 0x0080: 616c 2d6c 616e 6775 6167 6500 026a 6145 al-language..jaE! 0x0090: 000b 7072 696e 7465 722d 7572 6900 2869 ..printer-uri.(i! 0x00a0: 7070 3a2f 2f6e 7563 6966 6572 612e 6c6f pp://nucifera.lo! 0x00b0: 6361 6c2e 3a38 3633 322f 7072 696e 7465 cal.:8632/printe! 0x00c0: 7273 2f73 6176 6542 0014 7265 7175 6573 rs/saveB..reques! 0x00d0: 7469 6e67 2d75 7365 722d 6e61 6d65 0008 ting-user-name..! 0x00e0: 6675 6a69 6b61 7761 4400 1472 6571 7565 fujikawaD..reque! 0x00f0: 7374 6564 2d61 7474 7269 6275 7465 7300 sted-attributes.! 0x0100: 1261 7574 682d 696e 666f 2d72 6571 7569 .auth-info-requi! 0x0110: 7265 6444 0000 000a 6465 7669 6365 2d75 redD....device-u! 0x0120: 7269 4400 0000 126d 6172 6b65 722d 6368 riD....marker-ch! 0x0130: 616e 6765 2d74 696d 6544 0000 000d 6d61 ange-timeD....ma! 0x0140: 726b 6572 2d63 6f6c 6f72 7344 0000 0012 rker-colorsD....! 0x0150: 6d61 726b 6572 2d68 6967 682d 6c65 7665 marker-high-leve! 0x0160: 6c73 4400 0000 0d6d 6172 6b65 722d 6c65 lsD....marker-le! 0x0170: 7665 6c73 4400 0000 116d 6172 6b65 722d velsD....marker-! 0x0180: 6c6f 772d 6c65 7665 6c73 4400 0000 0e6d low-levelsD....m! 0x0190: 6172 6b65 722d 6d65 7373 6167 6544 0000 arker-messageD..! 0x01a0: 000c 6d61 726b 6572 2d6e 616d 6573 4400 ..marker-namesD.! 0x01b0: 0000 0c6d 6172 6b65 722d 7479 7065 7344 ...marker-typesD! 0x01c0: 0000 0010 7072 696e 7465 722d 636f 6d6d ....printer-comm! 0x01d0: 616e 6473 4400 0000 1570 7269 6e74 6572 andsD....printer! 0x01e0: 2d73 7461 7465 2d72 6561 736f 6e73 4400 -state-reasonsD.! 0x01f0: 0000 0d70 7269 6e74 6572 2d73 7461 7465 ...printer-state! 0x0200: 4400 0000 0c70 7269 6e74 6572 2d74 7970 D....printer-typ! 0x0210: 6503 e.

12年5月26日土曜日

Page 47: Air printで遊んでみた

…以下(略)

12年5月26日土曜日

Page 48: Air printで遊んでみた

• IPPを読む

• 0x03:オペレーション終了!

09:11:53.565534 IP6 localhost.52819 > localhost.8632: Flags [P.], seq 153:611, ack 1, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 458! 0x0000: 6000 0000 01ea 0640 0000 0000 0000 0000 `......@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 ce53 21b8 4e3f 4c57 .........S!.N?LW! 0x0030: 5660 9cae 8018 ffff 01f2 0000 0101 080a V`..............! 0x0040: 17a8 e617 17a8 e617 0101 000b 0000 0001 ................! 0x0050: 0147 0012 6174 7472 6962 7574 6573 2d63 .G..attributes-c! 0x0060: 6861 7273 6574 0005 7574 662d 3848 001b harset..utf-8H..! 0x0070: 6174 7472 6962 7574 6573 2d6e 6174 7572 attributes-natur! 0x0080: 616c 2d6c 616e 6775 6167 6500 026a 6145 al-language..jaE! 0x0090: 000b 7072 696e 7465 722d 7572 6900 2869 ..printer-uri.(i! 0x00a0: 7070 3a2f 2f6e 7563 6966 6572 612e 6c6f pp://nucifera.lo! 0x00b0: 6361 6c2e 3a38 3633 322f 7072 696e 7465 cal.:8632/printe! 0x00c0: 7273 2f73 6176 6542 0014 7265 7175 6573 rs/saveB..reques! 0x00d0: 7469 6e67 2d75 7365 722d 6e61 6d65 0008 ting-user-name..! 0x00e0: 6675 6a69 6b61 7761 4400 1472 6571 7565 fujikawaD..reque! 0x00f0: 7374 6564 2d61 7474 7269 6275 7465 7300 sted-attributes.! 0x0100: 1261 7574 682d 696e 666f 2d72 6571 7569 .auth-info-requi! 0x0110: 7265 6444 0000 000a 6465 7669 6365 2d75 redD....device-u! 0x0120: 7269 4400 0000 126d 6172 6b65 722d 6368 riD....marker-ch! 0x0130: 616e 6765 2d74 696d 6544 0000 000d 6d61 ange-timeD....ma! 0x0140: 726b 6572 2d63 6f6c 6f72 7344 0000 0012 rker-colorsD....! 0x0150: 6d61 726b 6572 2d68 6967 682d 6c65 7665 marker-high-leve! 0x0160: 6c73 4400 0000 0d6d 6172 6b65 722d 6c65 lsD....marker-le! 0x0170: 7665 6c73 4400 0000 116d 6172 6b65 722d velsD....marker-! 0x0180: 6c6f 772d 6c65 7665 6c73 4400 0000 0e6d low-levelsD....m! 0x0190: 6172 6b65 722d 6d65 7373 6167 6544 0000 arker-messageD..! 0x01a0: 000c 6d61 726b 6572 2d6e 616d 6573 4400 ..marker-namesD.! 0x01b0: 0000 0c6d 6172 6b65 722d 7479 7065 7344 ...marker-typesD! 0x01c0: 0000 0010 7072 696e 7465 722d 636f 6d6d ....printer-comm! 0x01d0: 616e 6473 4400 0000 1570 7269 6e74 6572 andsD....printer! 0x01e0: 2d73 7461 7465 2d72 6561 736f 6e73 4400 -state-reasonsD.! 0x01f0: 0000 0d70 7269 6e74 6572 2d73 7461 7465 ...printer-state! 0x0200: 4400 0000 0c70 7269 6e74 6572 2d74 7970 D....printer-typ! 0x0210: 6503 e.

12年5月26日土曜日

Page 49: Air printで遊んでみた

• IPPを読めた!

attributes-charset = utf-8attributes-natural-language = japrinter-uri = ipp://nucifera.local.:8632/printers/saverequesting-user-name = fujikawarequested-attributes = ( ・auth-info-required ・device-uri ・marker-change-time ・marker-colors ・marker-high-levels ・marker-levels ・marker-low-levels ・marker-message ・marker-names ・marker-types ・printer-commands ・printer-state-reasons ・printer-state ・printer-type)

12年5月26日土曜日

Page 50: Air printで遊んでみた

つまり、

• Get Printer Attrコマンドが来ている

(Printerの機能を確認している)

12年5月26日土曜日

Page 51: Air printで遊んでみた

• Get Printer Attrの応答は?

• rfc嫁!

12年5月26日土曜日

Page 52: Air printで遊んでみた

IPP Response形式

• HTTP Response

• BODY=IPP

• ver 1.1

• seq = 1

• Status-OK

• …

09:11:53.565907 IP6 localhost.8632 > localhost.52819: Flags [P.], seq 26:182, ack 611, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 156! 0x0000: 6001 6097 00bc 0640 0000 0000 0000 0000 `.`....@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 21b8 ce53 5660 9cc7 ........!..SV`..! 0x0030: 4e3f 4e21 8018 ffff 00c4 0000 0101 080a N?N!............! 0x0040: 17a8 e617 17a8 e617 4854 5450 2f31 2e31 ........HTTP/1.1! 0x0050: 2032 3030 204f 4b0d 0a44 6174 653a 2057 .200.OK..Date:.W! 0x0060: 6564 2c20 3034 2041 7072 2032 3031 3220 ed,.04.Apr.2012.! 0x0070: 3030 3a31 313a 3533 2047 4d54 0d0a 436f 00:11:53.GMT..Co! 0x0080: 6e6e 6563 7469 6f6e 3a20 4b65 6570 2d41 nnection:.Keep-A! 0x0090: 6c69 7665 0d0a 4b65 6570 2d41 6c69 7665 live..Keep-Alive! 0x00a0: 3a20 7469 6d65 6f75 743d 3130 0d0a 436f :.timeout=10..Co! 0x00b0: 6e74 656e 742d 5479 7065 3a20 6170 706c ntent-Type:.appl! 0x00c0: 6963 6174 696f 6e2f 6970 700d 0a43 6f6e ication/ipp..Con! 0x00d0: 7465 6e74 2d4c 656e 6774 683a 2034 3934 tent-Length:.494! 0x00e0: 0d0a 0d0a ....09:11:53.565929 IP6 localhost.8632 > localhost.52819: Flags [P.], seq 182:676, ack 611, win 65535, options [nop,nop,TS val 396944919 ecr 396944919], length 494! 0x0000: 6001 6097 020e 0640 0000 0000 0000 0000 `.`....@........! 0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................! 0x0020: 0000 0000 0000 0001 21b8 ce53 5660 9d63 ........!..SV`.c! 0x0030: 4e3f 4e21 8018 ffff 0216 0000 0101 080a N?N!............! 0x0040: 17a8 e617 17a8 e617 0101 0000 0000 0001 ................! 0x0050: 0147 0012 6174 7472 6962 7574 6573 2d63 .G..attributes-c! 0x0060: 6861 7273 6574 0005 7574 662d 3848 001b harset..utf-8H..! 0x0070: 6174 7472 6962 7574 6573 2d6e 6174 7572 attributes-natur! 0x0080: 616c 2d6c 616e 6775 6167 6500 026a 6104 al-language..ja.! 0x0090: 2300 0d70 7269 6e74 6572 2d73 7461 7465 #..printer-state! 0x00a0: 0004 0000 0003 4400 1570 7269 6e74 6572 ......D..printer! 0x00b0: 2d73 7461 7465 2d72 6561 736f 6e73 0004 -state-reasons..! 0x00c0: 6e6f 6e65 4500 0a64 6576 6963 652d 7572 noneE..device-ur! 0x00d0: 6900 0a6e 756c 6c3a 2f2f 2f32 3042 000d i..null:///20B..! 0x00e0: 6d61 726b 6572 2d63 6f6c 6f72 7300 0723 marker-colors..#! 0x00f0: 3030 3030 3030 4200 0000 0723 3030 4646 000000B....#00FF! 0x0100: 4646 4200 0000 0723 4646 3030 4646 4200 FFB....#FF00FFB.! 0x0110: 0000 0723 4646 4646 3030 2100 126d 6172 ...#FFFF00!..mar! 0x0120: 6b65 722d 6869 6768 2d6c 6576 656c 7300 ker-high-levels.! 0x0130: 0400 0000 6421 0000 0004 0000 0064 2100 ....d!.......d!.! 0x0140: 0000 0400 0000 6421 0000 0004 0000 0064 ......d!.......d! 0x0150: 2100 0d6d 6172 6b65 722d 6c65 7665 6c73 !..marker-levels

12年5月26日土曜日

Page 53: Air printで遊んでみた

• iPhoneが送るパケットを確認

• プリンタ一覧を表示する時

• プリンタを選んだ時

• プリントする時

• IPPコマンドを解析

• RFCとにらめっこしよう!

12年5月26日土曜日

Page 54: Air printで遊んでみた

• HTTPDとして(HTTP/1.1)

• KeepAlive

• Chunk転送

• HTTP Status 100 Continue

12年5月26日土曜日

Page 55: Air printで遊んでみた

CHUNKED?

12年5月26日土曜日

Page 56: Air printで遊んでみた

• transfer-encoding: chunked とは?

chunk

Data Block

size(改行)

(改行)

(改行)

chunk

HTTP Body

Data Block

Data Block

IPP カプセル

Data

Header

Attributes

Attribute End

12年5月26日土曜日

Page 57: Air printで遊んでみた

• 二つのバイトカウンタが必要

• HTTP 1.1 KeepAlive + chunk転送

• IPPパケット解析 (不定長)

12年5月26日土曜日

Page 58: Air printで遊んでみた

• 二つのバイトカウンタ

• Bound Pair で解決

• CFStreamCreateBoundPair()

Bound Stream Pair

writeStream

readStream

12年5月26日土曜日

Page 59: Air printで遊んでみた

• transfer-encoding: chunked とは?

chunk

Data Block

size(改行)

(改行)

(改行)

chunk

BoundStream

Pair

IPP カプセル

Data

Header

Attributes

Attribute End

chunkパーサー IPPパーサー

TCPStream

12年5月26日土曜日

Page 60: Air printで遊んでみた

PRINTデーター

12年5月26日土曜日

Page 61: Air printで遊んでみた

• 様々な困難を乗り越えて…

Print-Job Request

キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

12年5月26日土曜日

Page 62: Air printで遊んでみた

• Print-Job (0x0002)

• IPP Data: 印刷内容

11:06:28.162632 IP iphone4s.59585 > nucifera.8632: Flags [P.], seq 891:1356, ack 568, win 8200, options [nop,nop,TS val 1366144288 ecr 627012944], length 465! 0x0000: 4500 0205 527d 4000 4006 0e38 c0a8 2bea E...R}@[email protected]..+.! 0x0010: c0a8 2b03 e8c1 21b8 055c cc50 3a20 36f1 ..+...!..\.P:.6.! 0x0020: 8018 2008 ad3a 0000 0101 080a 516d b520 .....:......Qm..! 0x0030: 255f 7550 0101 0002 0000 0001 0147 0012 %_uP.........G..! 0x0040: 6174 7472 6962 7574 6573 2d63 6861 7273 attributes-chars! 0x0050: 6574 0005 7574 662d 3848 001b 6174 7472 et..utf-8H..attr! 0x0060: 6962 7574 6573 2d6e 6174 7572 616c 2d6c ibutes-natural-l! 0x0070: 616e 6775 6167 6500 026a 6145 000b 7072 anguage..jaE..pr! 0x0080: 696e 7465 722d 7572 6900 2869 7070 3a2f inter-uri.(ipp:/! 0x0090: 2f6e 7563 6966 6572 612e 6c6f 6361 6c2e /nucifera.local.! 0x00a0: 3a38 3633 322f 7072 696e 7465 7273 2f73 :8632/printers/s! 0x00b0: 6176 6542 0014 7265 7175 6573 7469 6e67 aveB..requesting! 0x00c0: 2d75 7365 722d 6e61 6d65 0005 6775 6573 -user-name..gues! 0x00d0: 7449 000f 646f 6375 6d65 6e74 2d66 6f72 tI..document-for! 0x00e0: 6d61 7400 0a69 6d61 6765 2f6a 7065 6742 mat..image/jpegB! 0x00f0: 0008 6a6f 622d 6e61 6d65 0006 e586 99e7 ..job-name......! 0x0100: 9c9f 0221 0006 636f 7069 6573 0004 0000 ...!..copies....! 0x0110: 0001 3400 096d 6564 6961 2d63 6f6c 0000 ..4..media-col..! 0x0120: 4a00 0000 0a6d 6564 6961 2d73 697a 6534 J....media-size4! 0x0130: 0000 0000 4a00 0000 0b78 2d64 696d 656e ....J....x-dimen! 0x0140: 7369 6f6e 2100 0000 0400 0022 ba4a 0000 sion!......".J..! 0x0150: 000b 792d 6469 6d65 6e73 696f 6e21 0000 ..y-dimension!..! 0x0160: 0004 0000 319c 3700 0000 004a 0000 0013 ....1.7....J....! 0x0170: 6d65 6469 612d 626f 7474 6f6d 2d6d 6172 media-bottom-mar! 0x0180: 6769 6e21 0000 0004 0000 0000 4a00 0000 gin!........J...! 0x0190: 116d 6564 6961 2d6c 6566 742d 6d61 7267 .media-left-marg! 0x01a0: 696e 2100 0000 0400 0000 004a 0000 0012 in!........J....! 0x01b0: 6d65 6469 612d 7269 6768 742d 6d61 7267 media-right-marg! 0x01c0: 696e 2100 0000 0400 0000 004a 0000 0010 in!........J....! 0x01d0: 6d65 6469 612d 746f 702d 6d61 7267 696e media-top-margin! 0x01e0: 2100 0000 0400 0000 0037 0000 0000 2300 !........7....#.! 0x01f0: 0d70 7269 6e74 2d71 7561 6c69 7479 0004 .print-quality..! 0x0200: 0000 0005 03 .....11:06:28.168985 IP iphone4s.59585 > nucifera.8632: Flags [.], seq 1364:2812, ack 593, win 8198, options [nop,nop,TS val 1366144294 ecr 627012950], length 1448! 0x0000: 4500 05dc 384d 4000 4006 2491 c0a8 2bea E...8M@.@.$...+.! 0x0010: c0a8 2b03 e8c1 21b8 055c ce29 3a20 370a ..+...!..\.):.7.! 0x0020: 8010 2006 7698 0000 0101 080a 516d b526 ....v.......Qm.&! 0x0030: 255f 7556 ffd8 ffe1 3ffe 4578 6966 0000 %_uV....?.Exif..! 0x0040: 4d4d 002a 0000 0008 000a 010f 0002 0000 MM.*............! 0x0050: 0006 0000 0086 0110 0002 0000 000a 0000 ................! 0x0060: 008c 011a 0005 0000 0001 0000 0096 011b ................! 0x0070: 0005 0000 0001 0000 009e 0128 0003 0000 ...........(....! 0x0080: 0001 0002 0000 0131 0002 0000 0004 352e .......1......5.! 0x0090: 3100 0132 0002 0000 0014 0000 00a6 0213 1..2............! 0x00a0: 0003 0000 0001 0001 0000 8769 0004 0000 ...........i....! 0x00b0: 0001 0000 00ba 8825 0004 0000 0001 0000 .......%........12年5月26日土曜日

Page 63: Air printで遊んでみた

• Exif !?

11:06:28.162632 IP iphone4s.59585 > nucifera.8632: Flags [P.], seq 891:1356, ack 568, win 8200, options [nop,nop,TS val 1366144288 ecr 627012944], length 465! 0x0000: 4500 0205 527d 4000 4006 0e38 c0a8 2bea E...R}@[email protected]..+.! 0x0010: c0a8 2b03 e8c1 21b8 055c cc50 3a20 36f1 ..+...!..\.P:.6.! 0x0020: 8018 2008 ad3a 0000 0101 080a 516d b520 .....:......Qm..! 0x0030: 255f 7550 0101 0002 0000 0001 0147 0012 %_uP.........G..! 0x0040: 6174 7472 6962 7574 6573 2d63 6861 7273 attributes-chars! 0x0050: 6574 0005 7574 662d 3848 001b 6174 7472 et..utf-8H..attr! 0x0060: 6962 7574 6573 2d6e 6174 7572 616c 2d6c ibutes-natural-l! 0x0070: 616e 6775 6167 6500 026a 6145 000b 7072 anguage..jaE..pr! 0x0080: 696e 7465 722d 7572 6900 2869 7070 3a2f inter-uri.(ipp:/! 0x0090: 2f6e 7563 6966 6572 612e 6c6f 6361 6c2e /nucifera.local.! 0x00a0: 3a38 3633 322f 7072 696e 7465 7273 2f73 :8632/printers/s! 0x00b0: 6176 6542 0014 7265 7175 6573 7469 6e67 aveB..requesting! 0x00c0: 2d75 7365 722d 6e61 6d65 0005 6775 6573 -user-name..gues! 0x00d0: 7449 000f 646f 6375 6d65 6e74 2d66 6f72 tI..document-for! 0x00e0: 6d61 7400 0a69 6d61 6765 2f6a 7065 6742 mat..image/jpegB! 0x00f0: 0008 6a6f 622d 6e61 6d65 0006 e586 99e7 ..job-name......! 0x0100: 9c9f 0221 0006 636f 7069 6573 0004 0000 ...!..copies....! 0x0110: 0001 3400 096d 6564 6961 2d63 6f6c 0000 ..4..media-col..! 0x0120: 4a00 0000 0a6d 6564 6961 2d73 697a 6534 J....media-size4! 0x0130: 0000 0000 4a00 0000 0b78 2d64 696d 656e ....J....x-dimen! 0x0140: 7369 6f6e 2100 0000 0400 0022 ba4a 0000 sion!......".J..! 0x0150: 000b 792d 6469 6d65 6e73 696f 6e21 0000 ..y-dimension!..! 0x0160: 0004 0000 319c 3700 0000 004a 0000 0013 ....1.7....J....! 0x0170: 6d65 6469 612d 626f 7474 6f6d 2d6d 6172 media-bottom-mar! 0x0180: 6769 6e21 0000 0004 0000 0000 4a00 0000 gin!........J...! 0x0190: 116d 6564 6961 2d6c 6566 742d 6d61 7267 .media-left-marg! 0x01a0: 696e 2100 0000 0400 0000 004a 0000 0012 in!........J....! 0x01b0: 6d65 6469 612d 7269 6768 742d 6d61 7267 media-right-marg! 0x01c0: 696e 2100 0000 0400 0000 004a 0000 0010 in!........J....! 0x01d0: 6d65 6469 612d 746f 702d 6d61 7267 696e media-top-margin! 0x01e0: 2100 0000 0400 0000 0037 0000 0000 2300 !........7....#.! 0x01f0: 0d70 7269 6e74 2d71 7561 6c69 7479 0004 .print-quality..! 0x0200: 0000 0005 03 .....11:06:28.168985 IP iphone4s.59585 > nucifera.8632: Flags [.], seq 1364:2812, ack 593, win 8198, options [nop,nop,TS val 1366144294 ecr 627012950], length 1448! 0x0000: 4500 05dc 384d 4000 4006 2491 c0a8 2bea E...8M@.@.$...+.! 0x0010: c0a8 2b03 e8c1 21b8 055c ce29 3a20 370a ..+...!..\.):.7.! 0x0020: 8010 2006 7698 0000 0101 080a 516d b526 ....v.......Qm.&! 0x0030: 255f 7556 ffd8 ffe1 3ffe 4578 6966 0000 %_uV....?.Exif..! 0x0040: 4d4d 002a 0000 0008 000a 010f 0002 0000 MM.*............! 0x0050: 0006 0000 0086 0110 0002 0000 000a 0000 ................! 0x0060: 008c 011a 0005 0000 0001 0000 0096 011b ................! 0x0070: 0005 0000 0001 0000 009e 0128 0003 0000 ...........(....! 0x0080: 0001 0002 0000 0131 0002 0000 0004 352e .......1......5.! 0x0090: 3100 0132 0002 0000 0014 0000 00a6 0213 1..2............! 0x00a0: 0003 0000 0001 0001 0000 8769 0004 0000 ...........i....! 0x00b0: 0001 0000 00ba 8825 0004 0000 0001 0000 .......%........12年5月26日土曜日

Page 64: Air printで遊んでみた

• 元ファイルと比較

• 長さ

• 先頭

• 末尾

11:06:28.168985 IP iphone4s.59585 > nucifera.8632: Flags [.], seq 1364:2812, ack 593, win 8198, options [nop,nop,TS val 1366144294 ecr 627012950], length 1448! 0x0000: 4500 05dc 384d 4000 4006 2491 c0a8 2bea E...8M@.@.$...+.! 0x0010: c0a8 2b03 e8c1 21b8 055c ce29 3a20 370a ..+...!..\.):.7.! 0x0020: 8010 2006 7698 0000 0101 080a 516d b526 ....v.......Qm.&! 0x0030: 255f 7556 ffd8 ffe1 3ffe 4578 6966 0000 %_uV....?.Exif..! 0x0040: 4d4d 002a 0000 0008 000a 010f 0002 0000 MM.*............! 0x0050: 0006 0000 0086 0110 0002 0000 000a 0000 ................! 0x0060: 008c 011a 0005 0000 0001 0000 0096 011b ................! 0x0070: 0005 0000 0001 0000 009e 0128 0003 0000 ...........(....! 0x0080: 0001 0002 0000 0131 0002 0000 0004 352e .......1......5.! 0x0090: 3100 0132 0002 0000 0014 0000 00a6 0213 1..2............! 0x00a0: 0003 0000 0001 0001 0000 8769 0004 0000 ...........i....! 0x00b0: 0001 0000 00ba 8825 0004 0000 0001 0000 .......%........! 0x00c0: 024c 0000 0316 4170 706c 6500 6950 686f .L....Apple.iPho! 0x00d0: 6e65 2034 5300 0000 0048 0000 0001 0000 ne.4S....H......! 0x00e0: 0048 0000 0001 3230 3132 3a30 343a 3032 .H....2012:04:02! 0x00f0: 2031 353a 3439 3a31 3000 0019 829a 0005 .15:49:10.......! 0x0100: 0000 0001 0000 01ec 829d 0005 0000 0001 ................! 0x0110: 0000 01f4 8822 0003 0000 0001 0002 0000 ....."..........! 0x0120: 8827 0003 0000 0001 0040 0000 9000 0007 .'.......@......

occidentale:Desktop fujikawa$ od -x -a 169654957.jpg | head -2000000000 d8ff e1ff fe3f 7845 6669 0000 4d4d 2a00 ? ? ? ? ? ? E x i f nul nul M M nul *0000020 0000 0800 0a00 0f01 0200 0000 0600 0000 nul nul nul bs nul nl soh si nul stx nul nul nul ack nul nul0000040 8600 1001 0200 0000 0a00 0000 8c00 1a01 nul 86 soh dle nul stx nul nul nul nl nul nul nul 8c soh sub0000060 0500 0000 0100 0000 9600 1b01 0500 0000 nul enq nul nul nul soh nul nul nul 96 soh esc nul enq nul nul0000100 0100 0000 9e00 2801 0300 0000 0100 0200 nul soh nul nul nul 9e soh ( nul etx nul nul nul soh nul stx0000120 0000 3101 0200 0000 0400 2e35 0031 3201 nul nul soh 1 nul stx nul nul nul eot 5 . 1 nul soh 20000140 0200 0000 1400 0000 a600 1302 0300 0000 nul stx nul nul nul dc4 nul nul nul ? stx dc3 nul etx nul nul0000160 0100 0100 0000 6987 0400 0000 0100 0000 nul soh nul soh nul nul 87 i nul eot nul nul nul soh nul nul0000200 ba00 2588 0400 0000 0100 0000 4c02 0000 nul ? 88 % nul eot nul nul nul soh nul nul stx L nul nul0000220 1603 7041 6c70 0065 5069 6f68 656e 3420 etx syn A p p l e nul i P h o n e sp 40000240 0053 0000 4800 0000 0100 0000 4800 0000

パケットダンプ

ファイルダンプ

12年5月26日土曜日

Page 65: Air printで遊んでみた

• Print-Job Request

• IPP Data

• 中身は印刷対象ファイルそのもの

• pdf, jpeg, pngで確認

12年5月26日土曜日

Page 66: Air printで遊んでみた

• プリントデーターを表示する

• UIWebViewController ←万能!凄い!

• - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL

12年5月26日土曜日

Page 67: Air printで遊んでみた

結果

12年5月26日土曜日

Page 68: Air printで遊んでみた

プログラム構造

• Application Main

• ViewController

• Print データー表示

• Server Control

• Bonjour登録

• HTTP Server

• HTTP/1.1 Chunked Stream Control

• IPP Command Control

• Ipp Capsule Parser / Selealizer

• Printer Status Model

12年5月26日土曜日

Page 70: Air printで遊んでみた

さいごに

12年5月26日土曜日

Page 71: Air printで遊んでみた

本を書いたよ

• インプレスジャパン

• 6/8発売 3,360円

• 第二章 Storyboards

担当しました

12年5月26日土曜日

Page 72: Air printで遊んでみた

本を書いたよ

第二章 Storyboards

• プログラマ向け&

• 非プログラマ向け

12年5月26日土曜日

Page 73: Air printで遊んでみた

本を書いたよデザインが得意な同僚

…そんな彼の為に

買うべし!

12年5月26日土曜日

Page 74: Air printで遊んでみた

おわり

12年5月26日土曜日