MAC アドレスに぀いお知りたいこずすべお

MAC アドレスに぀いお知りたいこずすべお通垞 XNUMX 進圢匏で衚瀺されるこれら XNUMX バむトが工堎でネットワヌク カヌドに割り圓おられ、䞀芋ランダムであるこずは誰もが知っおいたす。 アドレスの最初の XNUMX バむトがメヌカヌ ID で、残りの XNUMX バむトがメヌカヌ ID に割り圓おられるこずを知っおいる人もいたす。 自分で蚭定できるこずも知られおいたす arbitrary意的 䜏所。 Wi-Fi の「ランダム アドレス」に぀いお聞いたこずがある人は倚いでしょう。

それが䜕なのか考えおみたしょう。

MAC アドレス (メディア アクセス コントロヌル アドレス) は、ネットワヌク アダプタヌに割り圓おられる䞀意の識別子であり、䞻にむヌサネット、Wi-Fi、Bluetooth などの IEEE 802 暙準のネットワヌクで䜿甚されたす。 正匏には「EUI-48 Type Identifier」ず呌ばれたす。 名前から、アドレスの長さが 48 ビットであるこずは明らかです。 6バむト。 (オクテットが垞にドットで区切られる IPv4 アドレスずは察照的に) アドレスを蚘述するための䞀般に受け入れられた暙準はありたせん。通垞は、コロンで区切られた 00 ぀の 11 進数ずしお蚘述されたす: 22:AB:CD:EF:00:ただし、機噚メヌカヌによっおは 11 -AB-CD-EF-22-00 や 1122ab.cdef.XNUMX ずいう衚蚘を奜む堎合もありたす。

埓来、アドレスはフラッシュ プログラマなしでは倉曎できず、ネットワヌク カヌド チップセットの ROM にフラッシュされおいたしたが、珟圚ではオペレヌティング システムからプログラムでアドレスを倉曎できたす。 Linux および MacOS (垞に)、Windows (ドラむバヌが蚱可する堎合はほが垞に)、Android (root 化のみ) では、ネットワヌク カヌドの MAC アドレスを手動で蚭定できたす。 iOS (root なし) では、そのようなトリックは䞍可胜です。

アドレス構造

アドレスは、補造元の識別子の䞀郚、OUI、および補造元によっお割り圓おられた識別子で構成されたす。 OUI (Organizationally Unique Identifier) 識別子の割り圓お 埓事 IEEE 組織。 実際、その長さは 3 バむト (24 ビット) だけでなく、28 ビットたたは 36 ビットにもなり埗たす。そこから、ラヌゞ (MA-L)、ミディアム (MA-M)、およびタむプのアドレスのブロック (MAC アドレス ブロック、MA) が生成されたす。それぞれ小さいMA-Sが圢成されたす。 この堎合、発行されるブロックのサむズは、24、20、12 ビット、たたは 16 䞇、1 䞇、4 アドレスになりたす。 珟圚、玄 38 個のブロックが配垃されおおり、それらは倚数のオンラむン ツヌルを䜿甚しお衚瀺できたす。 IEEE たたは Wiresharkの.

アドレスの所有者は誰ですか?

公開されおいるものを簡単に凊理できる デヌタベヌスのアンロヌド IEEE は非垞に倚くの情報を提䟛したす。 たずえば、䞀郚の組織は、倚くの OUI ブロックを自瀟のために取埗しおいたす。 私たちのヒヌロヌは次のずおりです。

ベンダヌ
ブロック/レコヌド数
アドレス数、XNUMX侇

シスコシステムズ
888
14208

Apple
772
12352

サムスン
636
10144

華為技術有限公叞
606
9696

むンテル
375
5776

株匏䌚瀟アリスグルヌプ
319
5104

ノキアコヌポレヌション
241
3856

プラむベヌト
232
2704

テキサス·むンスツルメンツ
212
3392

ZTEコヌポレヌション
198
3168

IEEE 登録局
194
3072

ヒュヌレット・パッカヌド
149
2384

ホンハむプレシゞョン
136
2176

TP-LINK
134
2144

Dell Inc.
123
1968

ゞュニパヌネットワヌクス
110
1760

Sagemcom ブロヌドバンド SAS
97
1552

ファむバヌホヌム テレコミュニケヌション テクノロゞヌズ株匏䌚瀟株匏䌚瀟
97
1552

シャオミコミュニケヌションズ株匏䌚瀟
88
1408

広東欧坡移動通信有限公叞
82
1312

Google が保有しおいるデバむスは 40 台のみですが、これは驚くべきこずではありたせん。Google 自䜓は倚くのネットワヌク デバむスを補造しおいたせん。

MA ブロックは無料で提䟛されるのではなく、それぞれ 3000 ドル、1800 ドル、たたは 755 ドルずいう手頃な䟡栌 (サブスクリプション料金なし) で賌入できたす。 興味深いこずに、远加料金 (幎間) を支払えば、割り圓おられたブロックに関する公開情報の「非衚瀺」を賌入できたす。 䞊に芋られるように、それらは珟圚 232 個ありたす。

MAC アドレスはい぀枯枇したすか?

「IPv10 アドレスがもうすぐ枯枇する」ずいう 4 幎来の話には、誰もがかなりうんざりしおいたす。 はい、新しい IPv4 ブロックを入手するのは簡単ではなくなりたした。 IP アドレスが知られおいる 極めお䞍均䞀に分垃しおいる; しかし、倧䌁業や米囜政府機関が所有する巚倧で十分に掻甚されおいないブロックが存圚するが、それらを必芁ずする人々に再分配する望みはほずんどない。 NAT、CG-NAT、および IPv6 の普及により、パブリック アドレスの䞍足の問題は深刻ではなくなりたした。

MAC アドレスは 48 ビットで、そのうち 46 ビットが「有甚」ずみなされるため (なぜですか? 続きを読んでください)、246 個぀たり 1014 個のアドレスが埗られたす。これは、IPv214 アドレス空間の 4 倍です。
珟圚、玄 0.73 兆個のアドレスが配垃されおいたすが、これは総量の XNUMX% に過ぎたせん。 MAC アドレスが䞍足するたでには、ただ非垞に遠いです。

ランダム性ビット

OUI はランダムに配垃され、ベンダヌも個々のネットワヌク デバむスにアドレスをランダムに割り圓おるず想定できたす。 そうですか ワむダレス ネットワヌクで動䜜しおいる認蚌システムによっお収集された、私が自由に䜿える 802.11 デバむスの MAC アドレスのデヌタベヌス内のビットの分垃を芋おみたしょう。 WNAM。 これらのアドレスは、802.3 か囜で数幎にわたっお Wi-Fi に接続した実際のデバむスに属しおいたす。 さらに、XNUMX 有線 LAN デバむスの小芏暡なデヌタベヌスもありたす。

各サンプルの各 MAC アドレス (1 バむト) をバむトごずにビットに分解し、48 個の䜍眮のそれぞれにおける「1」ビットの出珟頻床を芋おみたしょう。 ビットが完党に任意の方法で蚭定された堎合、「50」を取埗する確率は XNUMX% になりたす。

Wi-FiセレクションNo.1RF
Wi-FiサンプルNo.2ベラルヌシ
Wi-Fiセレクションその3りズベキスタン
LANサンプリング(RF)

デヌタベヌス内のレコヌド数
5929000
1274000
366000
1000

ビット番号:
% ビット「1」
% ビット「1」
% ビット「1」
% ビット「1」

1
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

2
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

3
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

4
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

5
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

6
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

7
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

8
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

9
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

10
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

11
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

12
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

13
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

14
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

15
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

16
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

17
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

18
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

19
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

20
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

21
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

22
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

23
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

24
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

25
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

26
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

27
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

28
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

29
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

30
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

31
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

32
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

33
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

34
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

35
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

36
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

37
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

38
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

39
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

40
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

41
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

42
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

43
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

44
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

45
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

46
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

47
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

48
芖聎者の%が
芖聎者の%が
芖聎者の%が
芖聎者の%が

なぜ 7 ビットや 8 ビットでこのような䞍公平が生じるのでしょうか? ほずんど垞にれロが存圚したす。

実際、芏栌ではこれらのビットを特別なものずしお定矩しおいたす (りィキペディア):
MAC アドレスに぀いお知りたいこずすべお

MAC アドレスの最初のバむトの (先頭から) 0 番目のビットはナニキャスト/マルチキャスト ビットず呌ばれ、このアドレスで送信されるフレヌムのタむプ (フレヌム) が通垞 (1) かブロヌドキャスト (0) (マルチキャストたたは攟送。 通垞のナニキャスト ネットワヌク アダプタ通信の堎合、送信されるすべおのパケットでこのビットは「XNUMX」に蚭定されたす。

MAC アドレスの最初のバむトの (先頭から) 0 番目のビットは U/L (ナニバヌサル/ロヌカル) ビットず呌ばれ、アドレスがグロヌバルに䞀意であるか (1)、ロヌカルに䞀意である (0) かを決定したす。 デフォルトでは、すべおの「メヌカヌが調敎した」アドレスはグロヌバルに䞀意であるため、収集された MAC アドレスの倧郚分には、「130」に蚭定された 1 番目のビットが含たれおいたす。 割り圓おられた OUI 識別子のテヌブルでは、U/L ビットが「XNUMX」になっおいる゚ントリは玄 XNUMX 個だけであり、明らかにこれらは特別なニヌズのための MAC アドレスのブロックです。

最初のバむトの 4 ビット目から最初のビットたで、OUI 識別子の 6 バむト目ず XNUMX バむト目のビット、さらにメヌカヌによっお割り圓おられたアドレスの XNUMX  XNUMX バむトのビットは、ほが均等に分散されおいたす。 。

したがっお、ネットワヌク アダプタの実際の MAC アドレスでは、䞊䜍バむトの XNUMX ぀のサヌビス ビットを陀いお、ビットは実際には同等であり、技術的な意味はありたせん。

有病率

どの無線機噚メヌカヌが最も人気があるのか​​気になりたせんか? OUI デヌタベヌスの怜玢ずサンプル No. 1 のデヌタを組み合わせおみたしょう。

ベンダヌ
デバむスのシェア、%

Apple
26,09

サムスン
19,79

華為技術株匏䌚瀟
7,80

シャオミコミュニケヌションズ株匏䌚瀟
6,83

゜ニヌモバむルコミュニケヌションズ株匏䌚瀟
3,29

LG゚レクトロニクスモバむル通信
2,76

ASUSTek COMPUTERINC。
2,58

TCTモバむル株匏䌚瀟
2,13

ZTEコヌポレヌション
2,00

IEEE デヌタベヌスに芋぀かりたせん
1,92

レノボ・モバむル・コミュニケヌション・テクノロゞヌ株匏䌚瀟
1,71

HTCコヌポレヌション
1,68

村田補䜜所
1,31

むンプロ通信
1,26

マむクロ゜フト
1,11

深セン TINNO モバむル テクノロゞヌ株匏䌚瀟
1,02

モトロヌラ (歊挢) モビリティ テクノロゞヌズ コミュニケヌション カンパニヌ株匏䌚瀟
0,93

ノキアコヌポレヌション
0,88

䞊海颚力技術有限公叞株匏䌚瀟
0,74

レノボ モバむル コミュニケヌション (歊挢) カンパニヌ リミテッド
0,71

実践によれば、特定の堎所のワむダレス ネットワヌク加入者が裕犏であればあるほど、Apple デバむスのシェアが倧きくなりたす。

独自性

MAC アドレスは䞀意ですか? 各デバむス メヌカヌ (MA ブロック所有者) は、補造するネットワヌク アダプタヌごずに䞀意のアドレスを提䟛する必芁があるため、理論的にはそうです。 ただし、䞀郚のチップ メヌカヌ、぀たり次のような堎合がありたす。

  • 00:0A:F5 ゚アゎネットワヌクス株匏䌚瀟(珟圚はクアルコム)
  • 00:08:22 InPro Comm (珟圚は MediaTek)

明らかに各デバむスの再起動埌に、MAC アドレスの最埌の 1 バむトを乱数に蚭定したす。 私のサンプル No. 82 には、そのようなアドレスが XNUMX 件ありたした。

もちろん、意図的に「隣人のような」アドレスを蚭定したり、スニファヌで識別したり、ランダムに遞択したりするこずで、独自の倖郚アドレスを蚭定するこずもできたす。 たずえば、Mikrotik や OpenWrt などのルヌタヌのバックアップ構成を埩元するこずによっお、誀っお固有でないアドレスを蚭定しおしたう可胜性もありたす。

ネットワヌク䞊に同じ MAC アドレスを持぀ 802.1 ぀のデバむスがある堎合はどうなりたすか? それはすべお、ネットワヌク機噚 (有線ルヌタヌ、無線ネットワヌク コントロヌラヌ) のロゞックに䟝存したす。 ほずんどの堎合、䞡方のデバむスが動䜜しないか、断続的に動䜜したす。 IEEE 暙準の芳点から、MAC アドレス スプヌフィングに察する保護は、たずえば MACsec や XNUMXX を䜿甚しお解決するこずが提案されおいたす。

1 番目たたは XNUMX 番目のビットを「XNUMX」に蚭定しお MAC をむンストヌルするずどうなるでしょうか。 ロヌカルアドレスかマルチキャストアドレスか ほずんどの堎合、ネットワヌクはこれに泚意を払いたせんが、圢匏的にはそのようなアドレスは暙準に準拠しおいないため、準拠しない方が良いでしょう。

ランダム化の仕組み

電波をスキャンしお収集するこずによっお人々の動きを远跡するこずを防ぐために、スマヌトフォンの MAC オペレヌティング システムでは数幎前からランダム化テクノロゞヌが䜿甚されおいるこずがわかっおいたす。 理論的には、既知のネットワヌクを怜玢するために攟送波をスキャンするずき、スマヌトフォンは、MAC アドレスを送信元ずする 802.11 プロヌブ芁求タむプのパケット (パケットのグルヌプ) を送信したす。

MAC アドレスに぀いお知りたいこずすべお

ランダム化を有効にするず、「ステッチされた」パケット ゜ヌス アドレスではなく、スキャン サむクルごず、経時的、たたはその他の方法で倉化する他のパケット ゜ヌス アドレスを指定できたす。 効果ありたすか いわゆる「Wi-Fi レヌダヌ」によっお空䞭から収集された MAC アドレスの統蚈を芋おみたしょう。

サンプル党䜓
7 番目のビットがれロの堎合のみサンプルする

デヌタベヌス内のレコヌド数
3920000
305000

ビット番号:
% ビット「1」
% ビット「1」

1
芖聎者の%が
芖聎者の%が

2
芖聎者の%が
芖聎者の%が

3
芖聎者の%が
芖聎者の%が

4
芖聎者の%が
芖聎者の%が

5
芖聎者の%が
芖聎者の%が

6
芖聎者の%が
芖聎者の%が

7
芖聎者の%が
芖聎者の%が

8
芖聎者の%が
芖聎者の%が

9
芖聎者の%が
芖聎者の%が

10
芖聎者の%が
芖聎者の%が

11
芖聎者の%が
芖聎者の%が

12
芖聎者の%が
芖聎者の%が

13
芖聎者の%が
芖聎者の%が

14
芖聎者の%が
芖聎者の%が

15
芖聎者の%が
芖聎者の%が

16
芖聎者の%が
芖聎者の%が

17
芖聎者の%が
芖聎者の%が

18
芖聎者の%が
芖聎者の%が

19
芖聎者の%が
芖聎者の%が

20
芖聎者の%が
芖聎者の%が

21
芖聎者の%が
芖聎者の%が

22
芖聎者の%が
芖聎者の%が

23
芖聎者の%が
芖聎者の%が

24
芖聎者の%が
芖聎者の%が

25
芖聎者の%が
芖聎者の%が

26
芖聎者の%が
芖聎者の%が

27
芖聎者の%が
芖聎者の%が

28
芖聎者の%が
芖聎者の%が

29
芖聎者の%が
芖聎者の%が

30
芖聎者の%が
芖聎者の%が

31
芖聎者の%が
芖聎者の%が

32
芖聎者の%が
芖聎者の%が

33
芖聎者の%が
芖聎者の%が

34
芖聎者の%が
芖聎者の%が

35
芖聎者の%が
芖聎者の%が

36
芖聎者の%が
芖聎者の%が

37
芖聎者の%が
芖聎者の%が

38
芖聎者の%が
芖聎者の%が

39
芖聎者の%が
芖聎者の%が

40
芖聎者の%が
芖聎者の%が

41
芖聎者の%が
芖聎者の%が

42
芖聎者の%が
芖聎者の%が

43
芖聎者の%が
芖聎者の%が

44
芖聎者の%が
芖聎者の%が

45
芖聎者の%が
芖聎者の%が

46
芖聎者の%が
芖聎者の%が

47
芖聎者の%が
芖聎者の%が

48
芖聎者の%が
芖聎者の%が

絵が党然違うんです。

MAC アドレスの最初のバむトの 8 番目のビットは、プロヌブ芁求パケット内の SRC アドレスのナニキャスト特性に䟝然ずしお察応しおいたす。

7 番目のビットは 92.2% のケヌスでロヌカルに蚭定されたす。 かなりの自信を持っお、収集されたアドレスの非垞に倚くがランダム化されおおり、実際のアドレスは 8% 未満であるず掚枬できたす。 この堎合、そのような実アドレスの OUI 内のビットの分垃は、前の衚のデヌタずほが䞀臎したす。

OUIによれば、ランダム化されたアドレス぀たり、7番目のビットが「1」を所有しおいるのはどのメヌカヌですか?

メヌカヌOUI
すべおのアドレス間で共有する

IEEE デヌタベヌスに芋぀かりたせん
芖聎者の%が

グヌグル瀟
芖聎者の%が

残りの
芖聎者の%が

さらに、Google に割り圓おられたすべおのランダムなアドレスは、プレフィックスが付いた同じ OUI に属したす。 DA:A1:19。 この接頭語は䜕ですか? 芗いおみたしょう Android ゜ヌス.

private static final MacAddress BASE_GOOGLE_MAC = MacAddress.fromString("da:a1:19:0:0:0");

Stock Android は、ワむダレス ネットワヌクを怜玢するずきに特別な登録枈み OUI を䜿甚したす。これは、XNUMX 番目のビットが蚭定されおいる数少ないものの XNUMX ぀です。

ランダムなMACから実際のMACを蚈算したす

そこで芋おみたしょう:

private static final long VALID_LONG_MASK = (1L << 48) - 1;
private static final long LOCALLY_ASSIGNED_MASK = MacAddress.fromString("2:0:0:0:0:0").mAddr;
private static final long MULTICAST_MASK = MacAddress.fromString("1:0:0:0:0:0").mAddr;

public static @NonNull MacAddress createRandomUnicastAddress(MacAddress base, Random r) {
        long addr;
        if (base == null) {
            addr = r.nextLong() & VALID_LONG_MASK;
        } else {
            addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong());
        }
        addr |= LOCALLY_ASSIGNED_MASK;
        addr &= ~MULTICAST_MASK;
        MacAddress mac = new MacAddress(addr);
        if (mac.equals(DEFAULT_MAC_ADDRESS)) {
            return createRandomUnicastAddress(base, r);
        }
        return mac;
    }

アドレス党䜓、たたはその䞋䜍 XNUMX バむトは玔粋です Random.nextLong()。 「本物のMACの独自のリカバリ」は詐欺です。 高い信頌性を持っお、Android スマヌトフォンのメヌカヌは他の未登録の OUI を䜿甚しおいるず予想できたす。 iOS の゜ヌス コヌドはありたせんが、おそらく同様のアルゎリズムが䜿甚されおいるず思われたす。

䞊蚘は、プロヌブ芁求フレヌムの他のフィヌルドの分析、たたはデバむスによっお送信される芁求の盞察頻床の盞関関係に基づいお、Wi-Fi 加入者の匿名化を解陀するための他のメカニズムの䜜業をキャンセルするものではありたせん。 ただし、倖郚手段を䜿甚しお加入者を確実に远跡するこずには、非垞に問題がありたす。 収集されたデヌタは、特定のデバむスや人を参照せずに、倧量の数倀に基づいお堎所ず時間ごずに平均/ピヌク負荷を分析するのに適しおいたす。 正確なデヌタを持っおいるのは、「内郚」のモバむル OS メヌカヌ自身、およびむンストヌルされおいるアプリケヌションだけです。

あなたのデバむスの MAC アドレスを他人が知るこずで䜕が危険になるのでしょうか? サヌビス拒吊攻撃は、有線および無線ネットワヌクに察しお開始される可胜性がありたす。 たた、無線機噚の堎合は、センサヌが蚭眮された堎所に出珟した瞬間をある皋床の確率で蚘録するこずが可胜です。 アドレスをスプヌフィングするこずで、自分のデバむスになりすたすこずができたすが、これは远加のセキュリティ察策 (認蚌や暗号化) が䜿甚されおいない堎合にのみ機胜したす。 ここにいる人の99.9%は䜕も心配する必芁はありたせん。

MAC アドレスは芋た目よりも耇雑ですが、思ったよりも単玔です。

出所 habr.com

コメントを远加したす