Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ip_address_show_自作実装から学ぶNetlinkソケットプログラミング
Search
Takafumi Akiba
August 13, 2025
42
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
57
ICCE-Asia Presentation Slide
tarry
0
36
tcで遊ぶ!WebRTC配信をわざと崩してみた話
tarry
1
110
新雪プログラム 学内説明会
tarry
0
31
人の移動を活用した電子ペーパー更新システムの開発
tarry
0
260
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Navigating Weather and Climate Data
rabernat
0
230
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
360
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
630
Paper Plane (Part 1)
katiecoart
PRO
0
9.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
The Curse of the Amulet
leimatthew05
2
13k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
250
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Google's AI Overviews - The New Search
badams
0
1k
Ruling the World: When Life Gets Gamed
codingconduct
0
260
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