Slide 1

Slide 1 text

͋Δ೔ɺಥવϗετ໊͕
 “MacBookPro” ʹͳͬͨ࿩ @niw 10/30/2024 — Tokyo, Japan ΰϦϥ.vim #33

Slide 2

Slide 2 text

Yoshimasa Niwa @niw

Slide 3

Slide 3 text

Vim ϢʔβʔͰ͢!

Slide 4

Slide 4 text

͋Δ೔ɺಥવϗετ໊͕ “MacBookPro” ʹͳͬͯ͠·ͬͨ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

ͳͥ?

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

System Configuration Parameters macOS ͷઃఆ scutil --get ΍ --set ͰҎԼͷ3ͭઃఆ͕Ͱ͖Δ ComputerName LocalHostName HostName

Slide 9

Slide 9 text

System Configuration Parameters macOS ͷઃఆ ComputerName Λ௨ৗઃఆ͢Δ LocalHostName ͸σϑΥϧτͰ ComputerName HostName ͸௨ৗ ”” (ۭനจࣈྻ) ɻDNS ͷٯҾ͖Ͱܾఆɻ hostname(1) ΍ gethostname(3) ͷ஋͸͜ͷ HostName

Slide 10

Slide 10 text

ͭ·Γ DNS ٯҾ͖͕ “MacBookPro” ʹͳ͍ͬͯΔ!

Slide 11

Slide 11 text

Α͋͘Δϧʔλͷڍಈ DNS ΁ͷٯҾ͖ొ࿥ Α͋͘Δϧʔλ͸ DHCP Ͱ IPv4 ΞυϨεΛ഑ΓͭͭɺDNS ͷϓϩΩγͱΩϟογϡΛ͢Δɻ ͜ͷDNS ϓϩΩγ͕ͨ·ʹٯҾ͖ొ࿥Λ͢ΔλΠϓͷ΋ͷ ͕͋Δɻ dnsmasq ͳͲ͕࣮૷ྫɻ

Slide 12

Slide 12 text

https://thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

DHCP Ͱ “MacBookPro” ͱ ͍͏ϗετ໊Λཁٻ͍ͯ͠Δ?

Slide 17

Slide 17 text

DHCPREQUEST Option 12 DHCP Ͱϗετ໊Λࢦఆ͢Δ ࠓ࣌ͷ DHCP ͸ RFC 2131 Dynamic Host Con fi guration Protocol Ͱنఆ͞ΕΔ ॴҦαʔόʔɾΫϥΠΞϯτϞσϧͰɺΫϥΠΞϯτͷཁٻ ʹαʔόʔ͕ IP ΞυϨε΍ DNS αʔόͷΞυϨεΛฦ౴͢ Δ

Slide 18

Slide 18 text

-------- ------- | | +-------------------------->| |<-------------------+ | INIT- | | +-------------------->| INIT | | | REBOOT |DHCPNAK/ +---------->| |<---+ | | |Restart| | ------- | | -------- | DHCPNAK/ | | | | Discard offer | -/Send DHCPDISCOVER | -/Send DHCPREQUEST | | | | | | DHCPACK v | | ----------- | (not accept.)/ ----------- | | | | | Send DHCPDECLINE | | | | REBOOTING | | | | SELECTING |<----+ | | | | / | | |DHCPOFFER/ | ----------- | / ----------- | |Collect | | | / | | | replies | DHCPACK/ | / +----------------+ +-------+ | Record lease, set| | v Select offer/ | timers T1, T2 ------------ send DHCPREQUEST | | | +----->| | DHCPNAK, Lease expired/ | | | | REQUESTING | Halt network | DHCPOFFER/ | | | | Discard ------------ | | | | | | ----------- | | +--------+ DHCPACK/ | | | | Record lease, set -----| REBINDING | | | timers T1, T2 / | | | | | DHCPACK/ ----------- | | v Record lease, set ^ | +----------------> ------- /timers T1,T2 | | +----->| |<---+ | | | | BOUND |<---+ | | DHCPOFFER, DHCPACK, | | | T2 expires/ DHCPNAK/ DHCPNAK/Discard ------- | Broadcast Halt network | | | | DHCPREQUEST | +-------+ | DHCPACK/ | | T1 expires/ Record lease, set | | Send DHCPREQUEST timers T1, T2 | | to leasing server | | | | ---------- | | | | |------------+ | +->| RENEWING | | | |----------------------------+ ---------- Figure 5: State-transition diagram for DHCP clients https://datatracker.ietf.org/doc/html/rfc2131

Slide 19

Slide 19 text

DHCPREQUEST Option 12 DHCP Ͱϗετ໊Λࢦఆ͢Δ ΫϥΠΞϯτ͸ DHCPREQUEST ΛૹΓɺαʔόʔ͸ DHCPACK Ͱ IPΞυϨεΛฦ͢ DHCPREQUEST ʹ͸Φϓγϣϯ͕͋ΓɺRFC 1533 Ͱنఆ͞ ΕΔ Host Name Option (Code = 12) Ͱϗετ໊ΛࢦఆͰ͖Δ

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

“MacBookPro” ͕ Option 12 Ͱࢦఆ͞Ε͍ͯΔ!

Slide 22

Slide 22 text

͍Ζ͍Ζ࿙ΕͯΔ Wi-Fi ͷϓϥΠόγʔ Wi-Fi ͸ΘΓͱઅૢͳͦ͘ͷ΁Μʹ͋ΔͷΛ࢖ͬͯ͠·͏ Wi-Fi Ͱ IPv4 ௨৴͕Ͱ͖Δͷ͸ DHCP ͕͋Δ͔Β Ϋϥ΢Ξϯτ͸ DHCP ʹ͍Ζ͍Ζ৘ใΛ౉ͯ͠͠·ͬͯΔ ϗετ໊͕ʮ୭ʑͷPCʯͩͱɺOption 12 ʹ୭ʑͷ෦෼͕ ೖ͍ͬͯͨΓͯ͠ɺIPΞυϨε͔Βݸਓ͕ಛఆͰ͖ΔՄೳੑ ΋͋Δ

Slide 23

Slide 23 text

͍Ζ͍Ζ࿙ΕͯΔ Wi-FiͷϓϥΠόγʔ ࣮͸ macOS 15 ͔Β DHCP ΫϥΠΞϯτͷ࣮૷͕มΘͬͯ ͍Δɻ σϑΥϧτͰ͸ɺWi-Fi ܦ༝ͷ DHCPREQUEST ͷϗετ໊͸ ৗʹσόΠεͷछྨʹͳΔɻྫ͑͹ɺMacBookPro ΍ɺ MacBookAir

Slide 24

Slide 24 text

https://github.com/apple-oss-distributions/bootp/blob/ main/IPCon fi guration.bproj/dhcp.c#L473-L487

Slide 25

Slide 25 text

https://github.com/apple-oss-distributions/bootp/blob/ main/IPCon fi guration.bproj/ipcon fi gd.c#L5405-L5408

Slide 26

Slide 26 text

https://github.com/apple-oss-distributions/bootp/blob/main/bootplib/interfaces.c#L872-L880

Slide 27

Slide 27 text

#define LOCAL_ADMIN 0x2 return addr->addr[0] & LOCAL_ADMIN) != 0;

Slide 28

Slide 28 text

2nd LSB of 1st octet of OUI MACΞυϨεϥϯμϚΠθʔγϣϯ iPhone ΍ Mac ͷ MAC ΞυϨε͸σϑΥϧτͰϥϯμϚΠζ ͞Ε͍ͯΔ MAC ΞυϨε͸ 64-bit ͋ͬͯɺ࠷ॳͷ 32-bit ͸ϕϯμʔ͝ ͱʹܾ·͍ͬͯΔ ͜ΕΛ OUIs (Organizationally Unique Identi fi ers) ͱ͍͏

Slide 29

Slide 29 text

2nd LSB of 1st octet of OUI MACΞυϨεϥϯμϚΠθʔγϣϯ ࠷ॳͷόΠτͷԼ͔Β2൪໨ͷϏοτ͸ OUI ͷҰ෦ OUI ͸ϝʔΧʔ͝ͱʹൃߦ͞Ε͍ͯΔ ·͔͞ɺApple ͸ಛఆͷ OUI ϨϯδΛશ෦͍࣋ͬͯΔ?

Slide 30

Slide 30 text

IEEE 802-2001

Slide 31

Slide 31 text

2nd LSB of 1st octet of OUI MACΞυϨεϥϯμϚΠθʔγϣϯ ͭ͡͸ɺOUI ͷ࠷ॳͷόΠτͷԼ2Ϗοτ͸༧໿͞Ε͍ͯΔ Լ͔Β1Ϗοτ͸༻్͕ܾ·͍ͬͯΔ Լ͔Β2ϏοτΊ͸0ͱܾ·͍ͬͯΔ ͭ·Γɺਖ਼نͷOUIͰɺԼ͔Β2Ϗοτ໨͕1ʹͳΔ͜ͱ͸ͳ ͍

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

$ irb irb(main):001> "f6:06:3a:90:bc:fe".split(/:/) .map{|s| "%08b" % s.to_i(16)}.join(" ") => "11110110 00000110 00111010 10010000 10111100 11111110"

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

$ irb irb(main):001> "f0:00:00:00:00:00".split(/:/) .map{|s| "%08b" % s.to_i(16)}.join(" ") => "11110000 00000000 00000000 00000000 00000000 00000000"

Slide 36

Slide 36 text

ϗετ໊͕ “MacBookPro” ʹͳͬͨཧ༝ ·ͱΊ MACΞυϨεͷϥϯμϚΠθʔγϣϯͷख๏ͰMACΞυϨε ͷ࠷ॳͷΦΫςοτͷԼ͔Β2Ϗοτ໨͕1ʹͳΔ͜ͱͰɺ DHCPΫϥΠΞϯτ͕ϓϥΠϕʔτΞυϨεͱ൑அ͠ɺσό ΠεͷϞσϧ໊ΛDHCPREQUESTͷOption 12ʹϗετ໊ͱ͠ ͯࢦఆ͢Δ͜ͱͰɺDHCPαʔόͱ࿈ಈ͢ΔDNSαʔό͕ͦ ͷϞσϧ໊ΛٯҾ͖ొ࿥ͨ݁͠ՌɺDNSΫϥΠΞϯτͷٯҾ ͖ղܾͰϞσϧ໊͕ฦ͖ͬͯͨҝ