Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ip_address_show_自作実装から学ぶNetlinkソケットプログラミング
Search
Takafumi Akiba
August 13, 2025
52
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ip_address_show_自作実装から学ぶNetlinkソケットプログラミング
Takafumi Akiba
August 13, 2025
More Decks by Takafumi Akiba
See All by Takafumi Akiba
地方学生の成長を加速させる支援とは 〜新雪プログラムでの開発経験と修了後の展望〜
tarry
0
70
ICCE-Asia Presentation Slide
tarry
0
38
tcで遊ぶ!WebRTC配信をわざと崩してみた話
tarry
1
120
新雪プログラム 学内説明会
tarry
0
31
人の移動を活用した電子ペーパー更新システムの開発
tarry
0
270
Featured
See All Featured
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Code Reviewing Like a Champion
maltzj
528
40k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
A Tale of Four Properties
chriscoyier
163
24k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Faster Mobile Websites
deanohume
310
32k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
2k
The Spectacular Lies of Maps
axbom
PRO
1
1k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Transcript
ip address show 自作実装から学ぶ Netlinkソケットプログラミング 北海道情報大学大学院 修士2年 秋葉貴文
自己紹介 2 秋葉 貴文 所属 • 北海道情報大学大学院 修士2年 湯村研究室 好きなもの
• 電子ペーパー,ネットワーク,プログラミング ひとこと • yumulabステッカー配布しております!
はじめに • 本発表で紹介する内容は昨日の夜学んだ内容です. • 間違いなどあっても温かく見守ってください 3
ip address show コマンドとは? 基本情報 • LinuxでネットワークインターフェースのIPアドレスや関連情報を表示 • IPv4 と
IPv6 のアドレス,サブネットマスク,インターフェースの状態など • パッケージ:iproute2の一部 • 実行ファイル:/sbin/ip • 内部的にはNetlinkソケットを使ってカーネルから情報を取得 4
ip address show コマンドの実行 5 • インターフェース番号と名前:「1: lo:」「2: eth0:」 など
• インターフェースの状態: <LOOPBACK,UP,LOWER_UP> や state UP など • IPv4アドレス: inet 192.168.1.100/24 など • IPv6アドレス: inet6 fe80::5054:ff:fe12:3456/64 など • スコープ (scope): host, global, link などの有効範囲 • アドレスの有効期間: valid_lft および preferred_lft コマンドバリエーション • ip a • 短縮形 • ip addr show dev eth0 • インターフェース指定 • ip -6 addr • IPv6アドレスのみ表示
Netlinkソケットとは? • Linuxカーネルとユーザー空間プロセスが情報をやり取りするためのソケット • ネットワーク設定や状態取得,インターフェース情報の取得などを行う • 今回はインターフェース情報の取得に用いる • 特徴 •
アドレスファミリ:AF_NETLINK を使う • 通信の種類や目的をOSに伝える番号 • インターネット通信:AF_INET,AF_INET6 • カーネルとの制御情報のやり取り専用の通信路を作る • 例 • NETLINK_ROUTE : ネットワーク情報取得 • NETLINK_NETFILTER:パケットフィルタ設定 Netlinkソケットとは,カーネル設定や状態を直接やり取りするための特別なパイプ 6
ip address show を自作していく GOAL • インターフェースごとのIPv4, v6アドレスを表示できること TODO 1.
Netlinkソケットでインターフェース情報をカーネルに要求する 2. カーネルから struct ifaddrmsg を先頭に持つレスポンスを受け取る • struct ifaddrmsg : IPアドレスに関する基本情報 • struct ifinfomsg : インターフェース本体の状態情報 • 今回は使わない 3. ユーザー空間でレスポンスをパースし,整形して表示する 7
Netlinkソケットでインターフェース情報を要求する ソケット作成とバインド • AF_NETLINK / NETLINK_ROUTE はルーティング/アドレス管理用チャネル • sa.nl_pid =
getpid() • ユーザープロセス側のNetlinkエンドポイント ID • この値で往復の対応をつけられる 8
Netlinkソケットでインターフェース情報を要求する リクエストメッセージの組み立て • RTM_GETADDR:アドレス一覧を要求 • NLM_F_DUMP:ダンプ要求 • 該当する全エントリを複数メッセージで返してくる • ifa_family
= AF_UNSPEC:IPv4/IPv6 両方が対象 • nlmsg_seq:複数やり取り時に応答を識別するための番号 9
struct ifaddrmsg を先頭に持つレスポンスを受け取る ifaddrmsg 先頭のレスポンスを受け取って分解 • マルチパートメッセージを読み切る • NLM_F_DUMP の応答は複数の
RTM_NEWADDR に分割され,最後に NLMSG_DONE が来る • そこまで読み続ければ「全部取った」ことになる • NLMSG_ERROR は struct nlmsgerr で errno が入ってくる(負値) 10
struct ifaddrmsg を先頭に持つレスポンスを受け取る ifaddrmsg 先頭のレスポンスを受け取って分解 • RTM_NEWADDR の先頭が struct ifaddrmsg
• ifa_family : AF_INET / AF_INET6 • ifa_prefixlen : CIDR の長さ • ifa_index : どのインターフェースのアドレスか • ifa_scope : リンクローカル / グローバル など • よく使う属性 • IFA_ADDRESS : アドレス本体(IPv6 はこれが本命) • IFA_LOCAL : IPv4 ではローカルアドレス 11
ユーザー空間でレスポンスをパースし,整形して表示 • ip addr show っぽく IFを番号行 + アドレス行を字下げ •
prefixlen をそのまま /24 /64 として表示 12
デモ! TODO • インターフェース名と IP アドレスが表示されること • 実行: ./self_ip_a •
追加したインターフェースと IP アドレスが表示されること 1. dummy モジュールをロード: sudo modprobe dummy 2. 仮想 IF を追加(dummy0): sudo ip link add dummy0 type dummy 3. IP アドレスを割り当て: sudo ip addr add 192.168.100.1/24 dev dummy0 4. 有効化: sudo ip link set dummy0 up 5. 確認: ./self_ip_a 13
まとめ ip address show コマンド • ネットワークインターフェースの IPv4/IPv6 アドレス・prefix・状態を表示 •
Netlinkソケットでカーネルから情報取得 Netlinkソケット • カーネルとユーザー空間プロセス間の制御情報通信路(AF_NETLINK) • 「カーネル設定や状態をやり取りする専用パイプ」 自作手順 1. 要求送信 2. レスポンス受信 3. 表示 動作確認 • コマンドの実行 • dummy インターフェース作成後の表示確認 14