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
pingコマンド無しping
Search
uyuki
August 01, 2026
Technology
24
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
pingコマンド無しping
ネットワークゆるLT大会 #2 in 大阪にて発表したLTの資料
https://ckp-students.connpass.com/event/397725/
uyuki
August 01, 2026
More Decks by uyuki
See All by uyuki
自作OSでスライド発表する
uyuki234
1
4k
トラコン未経験者によるゼロからのICTSC準備ロードマップ
uyuki234
0
90
令和の時代にDE0と格闘する
uyuki234
0
110
Vibe codingでおすすめの言語と開発手法
uyuki234
0
370
Google Calendar APIでいい感じに一年を振り返りたかった
uyuki234
0
150
Other Decks in Technology
See All in Technology
AI Agent を本番環境へ―― Microsoft Foundry × Azure Serverless で作る Enterprise-Ready な基盤
shibayan
PRO
1
1k
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
230
13年運用タイトルのサーバーサイドが辿り着いた現在地 ― モンスターストライクにおける技術・組織・AI活用から得た知見
mixi_engineers
PRO
1
380
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
3
250
QAと開発の両側から進める AI活用 -QAプロセスAI支援ツールキットと Inner Loop / Outer Loopの取り組み-
legalontechnologies
PRO
2
400
AIエージェントに財布を渡す日 ― 承認付き"買い物エージェント"を作って実演
yama3133
1
110
plamo-3-translateの開発
pfn
PRO
0
240
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
140
システム監視入門
grimoh
5
790
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
0
650
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
170
システム監視を 「システムを監視するだけ」で 終わらせないために
seiud
0
160
Featured
See All Featured
Visualization
eitanlees
152
17k
HDC tutorial
michielstock
2
760
The Mindset for Success: Future Career Progression
greggifford
PRO
0
430
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
230
BBQ
matthewcrist
89
10k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
430
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
510
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
880
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Transcript
pingコマンド無し ping uyuki234 2026/08/02 ネットワークゆる LT大会 #2 in 大阪
About me • uyuki / uyuki234 • 興味: セキュリティ /
ネットワーク / 低レイヤー • https://scrapbox.io/uyuki234/ • https://x.com/uyuki234 • 作ってワクワク🤩 2
ping 3
ping とは? • 相手の機器までIP通信が届くかを確認するコマンド ◦ 疎通確認で使う 4
ping とは? • 相手の機器までIP通信が届くかを確認するコマンド ◦ • 疎通確認で使う 相手へICMP Echo Requestを送り、
返ってくるICMP Echo Replyを受信して、 応答時間(RTT)やパケット損失率を測る。 5
ping とは? • 相手の機器までIP通信が届くかを確認するコマンド ◦ • 疎通確認で使う 相手へICMP Echo Requestを送り、
返ってくるICMP Echo Replyを受信して、 応答時間(RTT)やパケット損失率を測る。 ◦ ◦ Internet Control Message Protocol:IP通信のエラーや状態を通知するためのプロトコル Round Trip Time:パケットを送ってから応答が返ってくるまでの往復時間 6
こんな感じ 7
8
コマンドを打った後、 どのような処理がされているか 知っていますか 9
10
https://commons.nicovideo.jp/works/nc222068 11
※macOSの場合 12
ping 8.8.8.8 コマンド実行の流れ ターミナル 13
ping 8.8.8.8 コマンド実行の流れ ターミナル $ ping 8.8.8.8 14
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 15
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 /sbin/ping
※sbin = system binaries 16
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping ※sbin = system binaries 17
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping ※sbin = system binaries macOS カーネル 18
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping ※sbin = system binaries macOS カーネル IPパケット 19
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping macOS カーネル IPパケット ルーター インターネット Request 8.8.8.8 ※sbin = system binaries 20
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request /sbin/ping macOS カーネル IPパケット ルーター インターネット Request ICMP Echo Reply 8.8.8.8 ※sbin = system binaries 21
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル $ ping 8.8.8.8 ICMP
Echo Request macOS カーネル /sbin/ping Reply IPパケット ルーター インターネット Request ICMP Echo Reply 8.8.8.8 ※sbin = system binaries 22
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 ターミナル (RTT計算・表示内容の整形 ) ターミナル上に表示 $
ping 8.8.8.8 ICMP Echo Request macOS カーネル /sbin/ping Reply IPパケット ルーター インターネット Request ICMP Echo Reply 8.8.8.8 ※sbin = system binaries 23
/sbin/pingと同じ役割を自作 →自作ping 24
ping 8.8.8.8 コマンド実行の流れ シェルがPATHから /sbin/pingを探して起動 オレンジだけ作ればいい ターミナル (RTT計算・表示内容の整形 ) ターミナル上に表示
$ ping 8.8.8.8 ICMP Echo Request macOS カーネル /sbin/ping Reply IPパケット ルーター インターネット Request ICMP Echo Reply 8.8.8.8 ※sbin = system binaries 25
Q:どんな機能が必要? 26
A:Apple OSS Distributionsを見ろ 27
全てはここにある https://github.com/apple-oss-distributions 28
ping.cは公開されている https://github.com/apple-oss-distributions/network_cmds/blob/main/ping.tproj/ping.c 29
ping自作 30
自作ping(makePing.c) のデモ 31
コンパイル →実演 32
自作pingで8.8.8.8に疎通! 33
ping自作成功! 34
makePing.c https://github.com/uyuki234/c-ping-lt-20260802 35
makePing.c ざっくり解説していく 36
Appleのping.c:約2100行 makePing.c:約470行 37
Appleのping.c:約2100行 makePing.c:約470行 最低限の実装でも、正しい ICMPパケットをカーネルへ渡し、 Echo Replyを受け取れば pingとして動作する 38
makePing.c に実装した主な関数 • main() ◦ • resolve_ipv4() ◦ • ICMP
Echo Requestパケットを組み立てる wait_for_reply() ◦ • IPアドレスまたはホスト名を IPv4アドレスに変換する build_echo_request() ◦ • 初期化し、Echo Requestの送信とReplyの受信を繰り返す select()とrecvfrom()でEcho Replyを最大1秒待つ parse_echo_reply() ◦ 受信パケットが目的の Echo Replyか確認する https://github.com/uyuki234/c-ping-lt-20260802 39
• Typeを8にしてEcho Requestを作り、 チェックサムを計算 40
• ICMPの入り口を作る ◦ • • • • ユーザー空間の makePingから、カーネルに ICMPの送受信を依頼するための窓口を作る処理
AF_INET:IPv4を使う SOCK_DGRAM:データグラムとして送受信する IPPROTO_ICMP:ICMPを扱う socket_fd:作成した窓口を識別する番号 41
カーネルへ渡す select()とrecvfrom()で最大1秒待つ 42
RTT = 受信時刻−送信時刻 • RTTを計算して表示する 43
ping自作を通じた学び 44
ping 自作を通じた学び • • シェルはコマンド名をPATHから検索し、対応する実行ファイルを起動する プログラムはソケットやシステムコールを通してカーネルへ処理を依頼する ◦ • • •
• これのおかげで、プログラムの記述量は想像よりも少なくなった ▪ もっと色々書かないと動かないと思ってた。 OS、カーネルという仕組みがいかに優秀かというこ とを実感。カーネルにいい感じの機能がたくさんあって最高 カーネルがIPヘッダ、ルーティング、ARP、実際の送受信を担当する OSの機能を再利用することで、プログラムはICMP処理に集中できる ICMPはType・Code・Checksumなどで構成される具体的なデータ形式である RTTやパケット損失率は、送受信結果からpingプログラム自身が計算する hoge自作をすると、上下の層に感謝の気持ちが芽生える https://github.com/uyuki234/c-ping-lt-20260802 45
まとめ 46
まとめと展望 • • • pingについておさらい ping 8.8.8.8 コマンド実行の流れを確認 ping自作した ◦
ICMPを送受信・計測するプログラムと IP通信を担うカーネルの協力で動いていた • 既存のOS機能を再利用することで、必要最低限の実装でもpingを再現できる • 展望:コンピュータシステムの理論と実装 第2版やる ◦ 論理ゲートから高級言語までの流れを押さえたい 47
pingコマンド無し ping uyuki234 2026/08/02 ネットワークゆる LT大会 #2 in 大阪