ネットワーク
ネットワーク
ip・ss・ping・curl・wget・nc・dig など、接続の確認・通信・ポートの調査に使うコマンド。
ipアドレスや経路を見る・設定する
IP アドレスやネットワークの経路を表示・設定します(昔の ifconfig の代わり)。
$ ip a # IPアドレスの一覧(ip addr show)
$ ip -br a # 1行ずつ簡潔に
$ ip r # 経路(ルーティングテーブル)
$ ip -4 addr show eth0 # eth0 のIPv4アドレス
$ ip link # ネットワークインターフェースの一覧ss使われているポートと接続
どのポートが使われているか、どこと接続しているかを表示します(昔の netstat の代わり)。
| オプション | 意味 |
|---|---|
-t / -u | TCP / UDP |
-l | 待ち受け(LISTEN)中のものだけ |
-n | 名前に変換せず数字で表示 |
-p | 使っているプロセスも表示(他人のものは sudo が必要) |
-a | すべて |
$ ss -tlnp # 待ち受け中のTCPポートとプロセス(定番)
$ sudo ss -tlnp | grep :80
$ ss -tn state established # 接続中のもの
$ ss -s # 集計だけping相手に届くか確かめる
相手のマシンに届くかどうか、どれくらいで応答が返るかを確かめます。
$ ping -c 4 8.8.8.8 # 4回だけ
$ ping -c 3 example.com
$ ping -i 0.2 -c 20 192.168.1.1 # 間隔を短くcurlHTTP などで通信する
URL にアクセスして、ページやファイルを取得したり、API にデータを送ったりします。
| オプション | 意味 |
|---|---|
-o <ファイル> / -O | 保存する / URLの名前で保存する |
-L | リダイレクトをたどる |
-s / -S | 進捗を表示しない / エラーは表示する(-sS で組み合わせ) |
-f | HTTPエラー(4xx・5xx)で失敗扱いにする |
-I | ヘッダーだけ取得(HEAD) |
-i | 応答ヘッダーも表示 |
-v | 通信の詳細を表示 |
-X <メソッド> | POST PUT DELETE など |
-H '<ヘッダー>' | リクエストヘッダーを付ける |
-d '<データ>' | 本文を送る(自動で POST になる) |
--json '<JSON>' | JSON を送る(Content-Type も自動で付く) |
-F '[email protected]' | フォームでファイルを送る |
-u user:pass | Basic認証 |
-w '%{http_code}' | 状態コードなどを表示する |
-C - | 途中から再開する |
$ curl https://example.com
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ curl -LO https://example.com/file.tar.gz
$ curl -I https://example.com
$ curl -s https://api.github.com/users/octocat | jq .name
$ curl -X POST --json '{"name":"alice"}' https://httpbin.org/post
$ curl -H "Authorization: Bearer $TOKEN" https://api.example.com/me
$ curl -s -o /dev/null -w '%{http_code} %{time_total}s\n' https://example.com
$ curl ipinfo.io # 自分のグローバルIPwgetファイルをダウンロードする
URL からファイルをダウンロードします。途中からの再開やサイトの丸ごと保存もできます。
$ wget https://example.com/file.iso
$ wget -c https://example.com/big.iso # 途中から再開
$ wget -O out.html https://example.com
$ wget -q -O- https://example.com | head # 画面に出す
$ wget -r -np -k https://example.com/docs/ # サイトを再帰的に保存nc (netcat)TCP/UDP で直接つなぐ
TCP/UDP で直接つないで、ポートが開いているか調べたり、データを送受信したりします。
$ nc -zv example.com 443 # ポートが開いているか
$ nc -zv 192.168.1.10 20-100 # 範囲をまとめて
$ nc -l 9000 > received.bin # 受け取る側
$ nc 192.168.1.10 9000 < file.bin # 送る側socat何でもつなぐ多機能版 netcat
2つの通信をつないで中継するなど、多機能な通信ツールです。
$ socat TCP-LISTEN:8080,fork TCP:localhost:3000 # 8080 → 3000 に中継
$ socat - TCP:example.com:80dig / nslookupDNS を調べる
Ubuntu には最初から入っていません。 で入れられます。
ドメイン名の DNS 情報(IP アドレスやメールサーバーなど)を調べます。
$ dig example.com
$ dig +short example.com A
$ dig +short example.com MX
$ dig @1.1.1.1 example.com # DNSサーバーを指定
$ dig -x 8.8.8.8 +short # 逆引き
$ nslookup example.comtraceroute / tracepath経路を調べる
Ubuntu には最初から入っていません。 で入れられます。
相手までの通信がどの経路を通っているかを調べます。
$ traceroute example.com
$ tracepath example.comethtoolネットワークカードの情報
ネットワークカードの速度や状態を表示します。
$ ethtool eth0iptables / nftファイアウォール
通信を許可・遮断するファイアウォールのルールを表示・設定します。
$ sudo iptables -L -n -v # ルールの一覧
$ sudo nft list rulesetip の便利なサブコマンド
$ ip neigh # ARP テーブル(同じLANの機器のMACアドレス)
$ ip route get 8.8.8.8 # その宛先へはどこから出ていくか
$ sudo ip addr add 192.168.50.10/24 dev eth0 # アドレスを追加(再起動で消える)
$ sudo ip link set eth0 down # インターフェースを止める
$ sudo ip link set eth0 up # 起動する
$ ip -s link # 送受信の量とエラーnmcliNetworkManager を操作する
NetworkManager を使って、Wi-Fi への接続やネットワーク設定を行います。
$ nmcli general status
$ nmcli device status
$ nmcli connection show
$ nmcli device wifi list # 周りの Wi-Fi
$ nmcli device wifi connect "SSID" password "pass"
$ nmcli connection up "有線接続 1"resolvectl名前解決(systemd-resolved)
どの DNS サーバーを使っているか確認したり、DNS のキャッシュを消したりします。
$ resolvectl status # 使っているDNSサーバー
$ resolvectl query example.com
$ sudo resolvectl flush-caches # DNSキャッシュを消すhostかんたんな DNS 問い合わせ
ドメイン名から IP アドレスを調べる、かんたんな DNS 問い合わせのコマンドです。
$ host example.com
$ host -t MX example.com
$ host 8.8.8.8 # 逆引きwhoisドメインやIPの登録情報
Ubuntu には最初から入っていません。 で入れられます。
ドメインや IP アドレスの登録情報(登録者・有効期限など)を調べます。
$ whois example.com | grep -iE 'expir|registrar'
$ whois 8.8.8.8 | grep -i orgnamenmapポートスキャン
Ubuntu には最初から入っていません。 で入れられます。
ネットワーク上の機器や、開いているポートを調べます。
$ nmap -sn 192.168.1.0/24 # LAN の中の生きている機器(ping スキャン)
$ nmap -p 22,80,443 example.com
$ nmap -sV localhost # 動いているサービスとバージョンmtrping と traceroute を合わせた経路診断
ping と traceroute を組み合わせて、どこで遅くなっているかを調べます。
$ mtr example.com # 経路の各地点の遅延と損失をリアルタイムに
$ mtr -rwc 50 example.com # 50回測ってレポートを出すtcpdump通信を覗く
流れている通信(パケット)を記録・表示します。
$ sudo tcpdump -i any port 53 # DNS の通信
$ sudo tcpdump -i eth0 host 192.168.1.10 -n
$ sudo tcpdump -i any -w cap.pcap port 443 # 保存(Wireshark で開ける)
$ sudo tcpdump -A -i lo port 3000 # 中身を文字で表示aria2c高速ダウンロード(分割・並列)
Ubuntu には最初から入っていません。 で入れられます。
1つのファイルを分割して並列にダウンロードするなど、高速なダウンロードツールです。
$ aria2c -x 8 https://example.com/big.iso # 8本の接続で分割ダウンロード
$ aria2c -i urls.txt -j 4 # 一覧を4つ同時に
$ aria2c file.torrentsftpSSH でファイルをやり取りする(対話式)
SSH を使って、対話式でファイルをやり取りします。
$ sftp user@host
sftp> ls / cd / lcd # リモート / ローカルの移動
sftp> get file.txt # ダウンロード
sftp> put local.txt # アップロード
sftp> put -r dir/ # ディレクトリごと
sftp> byesshfsリモートのディレクトリをマウントする
Ubuntu には最初から入っていません。 で入れられます。
SSH の先のフォルダを、手元のフォルダとしてマウントします。
$ mkdir -p ~/mnt/vps && sshfs vps:/srv ~/mnt/vps
$ fusermount -u ~/mnt/vps # 外すpython3 -m http.server — 手元をすぐにWebサーバーにする
$ python3 -m http.server 8000 --bind 127.0.0.1
$ python3 -m http.server 8000 -d ./distcurl でよく使う診断
$ curl -w '\nDNS %{time_namelookup}s 接続 %{time_connect}s TLS %{time_appconnect}s 最初の応答 %{time_starttransfer}s 合計 %{time_total}s\n' -o /dev/null -s https://example.com
$ curl --resolve example.com:443:203.0.113.10 https://example.com # DNSを使わずIPを指定
$ curl -x http://proxy:8080 https://example.com # プロキシ経由
$ curl -k https://self-signed.local # 証明書の検証をしない(開発用)