ffmpeg & mp4tags コマンドライン

Access from '216.73.216.108'
You are in US.
It is 09:41 JST now.

ffmpeg  mp4tags


Ubuntu 22.04 , Debian 12 でも mp4tags など mp4v2 ユーティリティを使用

mp4tags コマンドは ffmpeg で Video のタイトルなどマメに設定するのは骨がおれるので mp4tagsを騙し、騙し、Ubuntu 18 のコマンドを使用してきただが、調べてみると当時と比べかなりバージョンが上がっている(当たり前だが・・・)
そこでVersion 2.5.0.1 の debパッケージを作成したので好みで ダウンロードしてみてください。
インストールは簡単で sudo dpkg -i  [ダウンロードしたファイル] で可能です。 ちなみに こちらの環境では debian 12,  ubuntu 22.04で動作しています。

コマンドライン使用法

ffmpeg の基本である動画形式の変換です。

トランスコード

基本となるトランスコーダー的使い方について説明する。トランスコードとは、符号化してあるものを一旦復号化し、別の形式で符号化しなおす処理全般のことを言う。書式は以下の通り。

ffmpeg INPUT_OPTIONS -i INPUT_FILE OUTPUT_OPTIONS OUTPUT_FILE

入力ファイルと出力ファイルを指定して、あとは適宜オプションを指定すればよい。基本的にはそれだけである。例えば、AVI を MP4 に変換するには、

ffmpeg -i input.avi output.mp4

とすればよい。実際これで動くわけだが、これだと出力のコーデックがどうなっているのか、ビットレートはどうなのか、何も分からない。これらの不足している情報は自動的に補われ、例えばこの場合だと、出力のコーデックはおそらく H.264 になるものと思われる。

出力のビットレート等を具体的に指定したくなったときに使うのが出力オプションである。例えば動画のビットレートを 2 Mbps にしたいのであれば、

ffmpeg -i input.avi -b:v 2M output.mp4

とすればよい。もちろん1パス処理なので正確にこの値になるわけではないが、ある程度コントロールできる。では入力のオプションは何に使うのかと言うと、フォーマットに含まれていない情報を補ったり、それを上書きしたりするときに使う。また、純粋なトランスコード以外の簡単な加工、例えば動画サイズ変更、を行うオプションも存在する。

主要オプション解説

以下、主要なオプションについて簡単に解説する。/ で区切られているのは同じオプションの表記違い、(in), (out), (in/out) はそれぞれ、入力用オプション、出力用オプション、両方に使用可能なオプションを意味する。

フォーマット指定: -f (in/out)

フォーマットを指定するオプションだが、ほぼ100%拡張子から判定できるので、よほど変なことをしようと思わない限り基本的には不要。変なことというのは、例えば拡張子が avi の MP4 ファイルを作るなど。使う可能性があるものとしては、複数の動画を結合する際に使う concat と、RAW データを表す rawvideo がある。

コーデック指定: -c:v / -codec:v / -vcodec (in/out)

v の部分はビデオを意味する。同様にして、音声コーデックは -c:a で指定できる。動画も音声もまとめて扱う際は、-c とすればよい。使うことが多いと思われるコーデックをいくつか挙げておく。

ffmpeg での表記 対応するコーデック
libx264 OR h264 H.264 / AVC
libx265 OR hevc H.265 / HEAV
mpeg4 MPEG-4 Part 2
mpeg2video MPEG-2 Part 2
rawvideo RAW

MPEG-1 は古すぎるので、MPEG-3 は存在しないので挙げていない。H.264 と H.265 については、libx264 と libx265 がエンコーダー、h264 と hevc がデコーダーに対応する。仕様可能なコーデック一覧は、

ffmpeg -codecs

で取得できる。

動画の長さの指定: -t (in/out)

動画を指定した長さで打ち切ることができる。単位は秒。入力と出力に適応可能だが、これはそれぞれ、入力動画基準で何秒か、出力動画基準で何秒かという指定になる。この区別は、例えば途中で再生速度を変更したりタイムスタンプを書き換えたりした際に意味を持つ。

動画の開始時刻の指定: -ss (in/out)

単位は秒で、入出力両方に適応可能なことの意味合いは -t と同様。

品質指定: -q:v / -qscale:v (out)

出力の品質を指定できる。小さい方が高品質だが、ファイルサイズは大きくなる。具体的な意味合いはエンコーダーに依存する。なお、H.264 の場合はどうやらエンコーダーがこの指定を無視するようなので、代わりに以下の2つのエンコーダーオプションを用いる必要がある。

品質指定(最小): -qmin (out)

H.264 等のエンコーダーは、フレームごとに異なる q の値を使っている。このオプションは q の値域の最小値を指定する。

品質指定(最大): -qmax (out)

同様に q の値域の最大値を指定する。具体的な使い方はここを参照。

品質オプションのようにエンコーダー依存が大きいものに関しては、コーデックごとに何が有効か色々と試してみる必要がある。

フレームレート指定: -r (in/out)

単位は FPS。入力への指定と出力への指定で、振る舞いが異なる。入力へ指定した場合、動画に元からあるタイムスタンプが破棄され、ここで指定したフレームレートに基づいて新しくタイムスタンプが振り直される。つまり、間接的に動画の長さが変わることになる。出力へ指定した場合は、いわゆるフレームレート変換的な振る舞いになり、動画の長さは変わらない。なおフレーム補間は行われず、時間的に近いフレームが参照される。

動画サイズ指定: -s (in/out)

指定は -s 1920x1080 という要領で行う。これも入力と出力で意味が異なる。RAW データ等サイズが分からないフォーマットの場合、このオプションを用いてサイズ指定を行う。出力へ指定した場合は、そのサイズへの拡大縮小処理が走る。

ピクセルフォーマット指定: -pix_fmt (in/out)

ピクセルフォーマットとは、YUV データの並び方、ビット深度、UV のサブサンプリング方式等を指定するものである。動画サイズと同様、入力は値が不明なフォーマットの場合の指定、出力はその形式への変換となる。よく使われる、8-bit PLANAR のピクセルフォーマット例をいくつか挙げる。PLANAR というのは、YUV チャンネルをそれぞれ1枚の画像として保持する形式である。

ffmpeg での表記 UV サブサンプリング
yuv420p 縦横共に 1/ 2 にサブサンプリング
yuvj420p 縦横共に 1/ 2 にサブサンプリング
yuv422p 縦のみ 1/ 2 にサブサンプリング
yuv444p サブサンプリングしない

yuvj420p とは yuv420p のフルレンジ版であり、jJPEG からきている。レンジ設定は別にあるので、これは本来であればピクセルフォーマットに含めるべきものではない。ffmpeg としても depricated な設定だが、見かけることがあるので挙げた。フォーマットの一覧は、

ffmpeg -pix_fmts

で取得できる。

アルバムアート追加:

ffmpeg -i input.mp3 -i AlbumArt.png -disposition:v:1 attached_pic -map 0 -map 1 -id3v2_version 3 -metadata:s:v 'show=Show title' -metadata 'title=Music Title' -metadata "artist=Yoiko Tanaka" -metadata genre=misic -metadata date=2022 output.mp3

ビットレート指定: -b:v (out)

単位は bps。M や K などの接頭辞も使用可能。-qmin, -qmax と同様これもエンコーダーへのオプション指定であるが、あまり違いについて考える必要はない。なお、品質と同時に指定した場合にどちらが優先されるのかは把握していない。

音声無効化: -an (in/out)

最後に動画用のオプションではないが、便利なので挙げておく。これを指定すれば音声が削除される。

コマンド例

フォーマットだけ変換する

例えば AVI を MP4 に変換したいが、動画も音声もコーデックはそのままでいいという場合がある。そのときは、

ffmpeg -i input.avi -c copy output.mp4

とすれば、再エンコードなしで入れ物(フォーマット)だけ変更することができる。逆に言えば、-c copy を指定しない場合、仮に同じコーデックであったとしても再エンコードが走るので、品質が落ちる結果になる。

動画のコーデックを H.264 に変換する

人に動画を渡す際は、コーデックを H.264 にしておくのが現状では無難。

ffmpeg -i input.mp4 -c:v libx264 output.mp4

ただ、どこまで確実なのかは把握していないが、コーデック指定を省いて

ffmpeg -i input.mp4 output.mp4

としても望む結果は得られると思う。

RAW データをエンコードする

RAW データの場合は、最低限画像サイズとピクセルフォーマットを指定する必要がある。

ffmpeg -f rawvideo -s 1920x1080 -pix_fmt yuv420p -r 30 -i input.yuv output.mp4

input.yuv は、エンコードしたい全てのフレームデータを1つのファイル内で並べたものである。この例のように yuv 拡張子を使えば、-f rawvideo は省略できる。

H.264 動画の品質コントロール

オプションのところでも述べたが、H.264 の品質コントロールには -qmin, -qmax を用いる必要がある。例えば、

ffmpeg -i input.mp4 -qmax 16 -c:v libx264 output.mp4

として q の最大値を 16 あたりで抑えると、かなり高品質な動画になる。望む品質を得るには、数字を変更しつつ必要に応じて -qmin も指定すればよい。

4K 10-bit の動画を 2K 8-bit YUV420 に変換する

4K 動画や 10-bit 動画は扱いにくいので、2K 8-bit の YUV420 動画に変換したいときがある。

ffmpeg -i input.mp4 -s 1920x1080 -pix_fmt yuv420p output.mp4

YUV444 動画を用意する

あまり見かけないフォーマット(例えば YUV444)の動画が必要な時があるが、変換すれば簡単に手に入る。

ffmpeg -i input.mp4 -pix_fmt yuv444p output.mp4

動画を連番 JPEG に変換する

printf の要領で JPEG ファイル名のパターンを出力に指定すれば、連番 JPEG への変換が行われる。

ffmpeg -r 1 -i input.mp4 'out/img%05d.jpg'

ファイルパスは特殊文字や空白を含むことがあるので、念の為に ' で囲っている。一般的に動画のフレームレートは一定ではないが、ffmpeg の連番 JPEG 出力機能は定フレームレートで JPEG を作ってしまう。そのままだと、タイムスタンプがズレて飛ばされるフレームや重複するフレームが出てしまうので、入力側に -r 1 を設定して防止している。強制的に入力を定フレームレートにしたいだけなので、-r 11 の部分は何でもよい。

なお、別のやり方としては以下でもよい。

ffmpeg -i input.mp4 -vsync passthrough 'out/img%05d.jpg'

これは、出力側と入力側で同じタイムスタンプを使うことを強制している。つまり、「勝手に定フレームレートにせずに、入力通りのタイミングで JPEG にせよ」という指示である。

連番 JPEG を動画に変換する

これは先ほどの逆操作で、簡単である。

ffmpeg -r 30 -i 'in/img%05d.jpg' output.mp4

フレームレートを指定しないと 25 FPS になる。つまり、30 FPS 動画を作ろうとして

ffmpeg -i 'in/img%05d.jpg' -r 30 output.mp4

としてしまうと、25 FPS の動画を 30 FPS に変換したものができてしまうので注意。

簡易スローモーション動画の作成

例えば入力動画が 30 FPS だとすると、

ffmpeg -r 7.5 -i input.mp4 output.mp4

とするだけで、4倍のスローモーション動画を作ることができる。

簡易タイムラプス動画の作成

基本的にはスローモーションの逆である。30 FPS 動画を4倍速にするには、以下のようにすればよい。

ffmpeg -r 120 -i input.mp4 -r 30 output.mp4

120 FPS 動画を表示させるのは現実的ではないので、出力側に常識的なフレームレートを指定して間引きを行っている。

複数の動画ファイルを結合する

複数の動画ファイルを結合するには、まず結合する順番にファイルパスを並べたテキストファイルを用意する。

# 動画のパスをつなげる順に列挙する
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'

このように、file の後にパスを記述する。なお、# はコメントであり、念のためにパスを ' で囲っている。フォーマットを concat とし、このテキストファイルを入力として設定すれば、結合された結果が得られる。

ffmpeg -f concat -safe 0 -i input.txt output.mp4

オプション -safe 0 は必須ではないが、これがないと書き方によっては「安全ではないパス」として弾かれてしまい面倒なので、付けている。入力動画のコーデックが同一なら、

ffmpeg -f concat -safe 0 -i input.txt -c copy output.mp4

のように書いて再エンコードを避けることもできる。

一定間隔おきに動画の内容を静止画にして保存する

長い動画の内容をひと目で把握するために、例えば10秒おきにフレームを取り出したい場合がある。出力のフレームレート指定を利用して連番 JPEG に変換すれば、簡単に実現できる。

ffmpeg -i input.mp4 -r 1/10 'out/img%05d.jpg'

動画から音声だけを削除する

動画データには手を加えずに、音声データだけファイルから削除する。

ffmpeg -i input.mp4 -c:v copy -an output.mp4

mp4tags options

mp4tags: You must specify at least one MP4 file.
usage mp4tags OPTION... FILE...
Adds or modifies iTunes-compatible tags on MP4 files.

      -help            Display this help text and exit
      -version         Display version information and exit
  -A, -album       STR  Set the album title
  -a, -artist      STR  Set the artist information
  -b, -tempo       NUM  Set the tempo (beats per minute)
  -c, -comment     STR  Set a general comment
  -C, -copyright   STR  Set the copyright information
  -d, -disk        NUM  Set the disk number
  -D, -disks       NUM  Set the number of disks
  -e, -encodedby   STR  Set the name of the person or company who encoded the file
  -E, -tool        STR  Set the software used for encoding
  -g, -genre       STR  Set the genre name
  -G, -grouping    STR  Set the grouping name
  -H, -hdvideo     NUM  Set the HD flag (1\0)
  -i, -type        STR  Set the Media Type(tvshow, movie, music, ...)
  -I, -contentid   NUM  Set the content ID
  -j, -genreid     NUM  Set the genre ID
  -l, -longdesc    STR  Set the long description
  -L, -lyrics      NUM  Set the lyrics
  -m, -description STR  Set the short description
  -M, -episode     NUM  Set the episode number
  -n, -season      NUM  Set the season number
  -N, -network     STR  Set the TV network
  -o, -episodeid   STR  Set the TV episode ID
  -O, -category    STR  Set the category
  -p, -playlistid  NUM  Set the playlist ID
  -P, -picture     PTH  Set the picture as a .png
  -B, -podcast     NUM  Set the podcast flag.
  -R, -albumartist STR  Set the album artist
  -s, -song        STR  Set the song title
  -S  -show        STR  Set the TV show
  -t, -track       NUM  Set the track number
  -T, -tracks      NUM  Set the number of tracks
  -x, -xid         STR  Set the globally-unique xid (vendor:scheme:id)
  -X, -rating      STR  Set the Rating(none, clean, explicit)
  -w, -writer      STR  Set the composer information
  -y, -year        NUM  Set the release date
  -z, -artistid    NUM  Set the artist ID
  -Z, -composerid  NUM  Set the composer ID
  -r, -remove      STR  Remove tags by code (e.g. "-r cs"
                        removes the comment and song tags)

qemu

qemu on Ubuntu 20.04

  1.  Install
    sudo apt -y update
    sudo apt -y install kvm
    sudo apt -y install kvm-ipxe
    sudo apt -y install qemu-common
    sudo apt -y install qemu-kvm 
    sudo apt -y install qemu-keymaps
    sudo apt -y install qemu-kvm-extras
    sudo apt -y install qemu-system
    sudo apt -y install qemu-user
    sudo apt -y install qemu-utils 
    sudo apt -y install qemu-launcher
    sudo apt -y install qemulator
    sudo apt -y install qemuctl
    sudo apt -y install qtemu 
    sudo apt -y install qemu-kvm-spice
    
  2. Setup kernel modules.

    load each kernel modules.

    sudo modprobe kvm_intel
    sudo modprobe kvm
    lsmod | grep kvm
    kvm-ok
    

    うまく組み込めるようだったら、自動で組み込むように設定することにする。 /etc/modules を編集し、

    kvm_intel
    kvm
    

    の2行を追加する

  3. Ubuntu でSPICE クライアントのインストール
    sudo apt -y update
    sudo apt -y install spice-client
    
  4. Ubuntu で仮想マシン管理ソフトウエア libvirt と ubuntu-vm-builder のインストール
    sudo apt -y update
    sudo apt -y install libvirt0
    sudo apt -y install libvirt-bin
    sudo apt -y install libvirt-dev
    sudo apt -y install libvirt-doc
    sudo apt -y install python-libvirt
    sudo apt -y install libvirt-ruby 
    sudo apt -y install virt-manager 
    sudo apt -y install virt-viewer
    sudo apt -y install virt-goodies
    sudo apt -y install virt-top
    sudo apt -y install ubuntu-vm-builder
    sudo apt -y install cpu-checker
    sudo apt -y install bridge-utils
    

    以上の操作で,vmware2libvirt, virt-viewer, virsh, virt-install などのコマンドが使えるようになります また /etc/libvirt 下にいくつかの設定ファイルができる

  5. ユーザの所属グループの調整
    sudo usermod $(whoami) -a -G libvirtd
    cat /etc/group | grep libvirtd
    

QEMU を使ってみる

【ここでの設定内容】

設定項目 データ型 本 Web ページでの設定値
仮想マシン・イメージファイルのファイル名 文字列 /home/os001.qcow2
仮想マシン・イメージファイルのフォーマット 文字列 qcow2
仮想マシン・イメージファイルの最大サイズ 数値 80 (GB)
ゲスト OS の種類 文字列 precise (Ubuntu 12.04)
仮想マシンに割り当てるメインメモリのサイズ 数値 2048 (MB)
仮想マシンの起動に使う ISO イメージファイル名 文字列 /home/ubuntu-12.04-desktop-amd64.iso
cd /tmp
qemu-img create -f qcow2 /home/os001.qcow2 80G .
sudo modprobe kvm_intel 
# 32 ビット の Ubuntu 12.04 の場合
qemu-system-i386 -hda /home/os001.qcow2 -m 2048 -cdrom /home/ubuntu-12.04-desktop-i386.iso -boot d --enable-kvm -usb -serial none -parallel none
# 64 ビット の Ubuntu 12.04 の場合
qemu-system-x86_64 -hda /home/os001.qcow2 -m 2048 -cdrom /home/ubuntu-12.04-desktop-amd64.iso -boot d --enable-kvm -usb -serial none -parallel none

qemu-launcher の起動コマンド

 

qemu-launcher

マシン名、割り当てるメモリ量、仮想ハードディスク、仮想 CD-ROM の設定ができる。

Redmine Install

Step 1: インストールするサーバーにLoginしアップデートを行う

SSH to your server:

$ ssh user@sshdserver

Begin to update it for latest packages to be updated in the server.

$ sudo -i
# apt update
# apt full_upgrade
# reboot

Step 2: MySQL 8.0 をインストール

# apt install mysql-server-8.0

Step 3: インストール Apache, Ruby and Passenger

# apt install apache2 libapache2-mod-passenger

Step 4: インストール Redmine と必要なパッケージ

Redmine の依存関係は全く完結しない! そういう意味ではバグパッケージかも。

# apt install redmine redmine-mysql fonts-takao-gothic pkg-config make libffi-dev libmysqlclient-dev \ 
libreadline-dev libedit-dev rmagic imagemagick libmagickcore-dev libmagickwand-dev

yes を選択します。

install redmine ubuntu 01

dbのパスワードを入力:

install redmine ubuntu 02

パスワード確認:

install redmine ubuntu 03

Step 5: gem update

時間がかかる上にエラーが出ても停止しないので注意が必要

# gem update

エラーが発生したら足りないパッケージをインスト−ルして再度、実行し、エラーがなくなるまで繰り返す。エラーがなくなったらrm -r /var/lib/gems でgemを完全に消したのち gem update を実行。これでエラーがなくなれば完了!

# apt install xxxxxx <- check packages.
## No error found.
# rm -r /var/lib/gems
# gem update

Apache Passenger module file, /etc/apache2/mods-available/passenger.conf を下記の通り修正。

<IfModule mod_passenger.c>
  PassengerDefaultUser www-data
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>
EOF

シンボリックリンクを作成:

ln -s /usr/share/redmine/public /var/www/html/redmine

Access Redmine web console Domain name

Redmine サイトの設定 ServerAdmin ServerNameは 適時変更する。

# vim /etc/apache2/sites-available/redmine.conf

Add configuration data – replace projects.computingforgeeks.com with your domain name.

<VirtualHost *:80>
  ServerAdmin admin@example.com
  DocumentRoot /var/www/html/redmine
  ServerName projects.example.com
  ServerAlias www.projects.example.com
  <Directory /var/www/html/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Redmine ウェブサイトを有効にしてApache2を再起動すれば完成!!

sudo a2ensite redmine.conf
sudo systemctl restart apache2.service

You should now be able to access redmine with your domain: http://projects.example.com

install redmine ubuntu 04

Default Login credentials are:

Username: admin
Password: admin
install redmine ubuntu 05

Network layer

Access from '216.73.216.108'
You are in US.
It is 09:41 JST now.

OSIモデル

OSIモデルは、インターネットの仕組みの概念モデルです。OSIモデルの主な目標は、人々がネットワーク機器とプロトコルについて話し、どのプロトコルがどのソフトウェアとハードウェアによって使用されるかを決定し、基盤となるハードウェアに関係なくインターネットがどのように機能するかを示すことを支援することです。

OSIモデルでは、さまざまなテクノロジーを分割して、インターネットを層で機能させます。合計で7つの層があります。

OSI Model

OSIモデルの第3層

OSI第3層は、ネットワーク層と呼ばれます。第3層は、相互接続されたネットワーク、つまりインターネットを可能にするプロトコルとテクノロジーで構成されています。この層は、ネットワーク全体のルーティングが行われる場所です。ネットワークを通過するデータはパケットに分割され、これらのパケットは第3層で宛先を与えられ、目的地へ送信されます。このプロセスで最も重要なプロトコルはインターネットプロトコル(IP)です。

第3層のプロトコルは、接続を開いたり、信頼できるデータ配信を保証したり、標的とするデバイス上のどのサービスがデータを使用すべきかを示したりしません。これらは第4層のプロセスです。第4層では、TCPやUDPなどのトランスポートプロトコルを使用します。第4層トランスポートプロトコルを使用せずにネットワーク経由でパケットを送信することは、住所が正しいことを確認せず、あるいはその住所の誰が手紙を開けるかを明示せずに住所宛てに手紙を郵送したり、また信頼できる郵便配達サービスを使わないようなものです。データは到着するかもしれないし、到着しないかもしれません。これが、多くの第3層プロトコルが常に、データが適切な場所に送られることを保証する第4層トランスポートプロトコルと共に使用される理由です。

ただし、トランスポートプロトコルを使用しなくても、IPを介してネットワークの宛先にデータパケットを送信することは可能です。

第3層は接続がないため、第3層のDDoS攻撃はTCP経由で接続を開いたり、ポート割り当てを示す必要はありません。第3層 DDoS攻撃は、特定のポートではなく、コンピューターが実行しているネットワークソフトウェアを標的にします。

第3層に使用されるプロトコルは?

これらは最も広く使用されている第3層プロトコルであり、DDoS攻撃で使用される可能性が最も高いものです。

IP:インターネットプロトコル(IP)は、正しい目的地に到着するようにデータのパケットをルーティングおよびアドレス指定します。インターネットに接続するすべてのデバイスにはIPアドレスがあり、IPプロトコルは各データパケットに正しいIPアドレスを添付します。誰かに宛てて手紙を送るのと同様です。

IPsec: IPsecは、VPNが使用するIPの暗号化されたバージョンであり、HTTPSとHTTPの違いに似ています。

ICMP:インターネット制御メッセージプロトコル(ICMP)はエラーレポートとテストを処理します。コネクションレス型プロトコルであるICMPは、TCPやUDPなどのトランスポートプロトコルを使用しません。むしろ、ICMPパケットはIPのみで送信されます。開発者とネットワークエンジニアは、pingおよびtraceroute機能にICMPを使用します。通常、一度に送信する必要があるICMPパケットは1つだけです。

第3層プロトコルには以下も含まれます。

  • IGMP:インターネットグループメッセージプロトコルはIPマルチキャストグループを管理し、ネットワーク内の複数のデバイスが同じIPトラフィックを受信できるようにします。
  • ARP:アドレス解決プロトコルは、単一のネットワーク内でのみ使用されます。コンピューターはこのプロトコルを使用して、IPアドレスをネットワーク内のMACアドレスにマップします(MACアドレスは、すべてのインターネット対応デバイスに組み込まれた一意の識別子で指紋のようなものです)。

これらのプロトコルのいずれかを使用すれば、理論的には攻撃が可能です。ICMPは一般に、応答できないほど多くのpingでサーバーをフラッディングするか、1つの大きなpingパケットで受信デバイスをクラッシュさせる(これは「ping of death 」として知られています)ために使用されます。攻撃者は、IPsecを使用して、標的にジャンクデータや非常に大きなセキュリティ証明書を送付してフラッディングさせることができます。

ただし、これらのプロトコルのすべてがDDoS攻撃に対して実用的であるとは限らず、ハードウェアの更新によって一部の種類の攻撃は不可能になります。たとえば、ARPはローカルネットワーク内でのみ動作するため、攻撃者はまずDDoS攻撃を実行する前にローカルネットワークに接続する必要があります。また、ICMP ping of death攻撃は、大きすぎるIPパケットを無視する最新のハードウェアでは不可能です。

第3層 DDoS攻撃の仕組みは?

他のタイプのDDoS攻撃と同様に、攻撃者はこれらのプロトコルを介して大量のジャンクネットワークトラフィックを送信します。プロトコルに応じて、これを行うためのさまざまな方法があります。ジャンクトラフィックは正当なユーザーリクエストの邪魔になり、それらへの応答を遅くしたり、完全にブロックしたりします。ジャンクデータが非常に多いため、標的のリソースを圧迫し、時に標的がクラッシュする場合があります。

よく知られているタイプの第3層 DDoS攻撃の例

IPを介した攻撃など、他の攻撃も可能ですが、ICMPベースの攻撃が最も一般的です。よく知られたICMP攻撃には以下が含まれます。

  • Pingフラッド: PingフラッドDDoS攻撃では、攻撃者は数千または数百万ものping要求を一度にサーバーに送信します。
  • Smurf攻撃:ICMPにはセキュリティまたは検証手段がありません。これにより、攻撃者はICMP要求でIPアドレスをスプーフィングできます。 Smurf DDoS攻撃では、攻撃者はping要求を数千のサーバーに送信し、ping要求の中で標的のIPアドレスを偽装して、応答が攻撃者ではなく標的に送信されるようにします。最新のネットワークハードウェアのほとんどは、この攻撃に対して脆弱性はありません。
  • Ping of death:ICMP Ping of Death攻撃では、攻撃者が最大許容サイズを超えるping要求を標的に送信します。標的に向かう途中のルーターは、pingを小さなパケットにフラグメント化するため、ターゲットはそれらを受け入れますが、小さなフラグメントから大きなパケットを再構築しようとすると、パケットサイズが最大値を超え、標的はクラッシュします。最近のデバイスは、この攻撃に対して脆弱ではありません。

TCP / IPモデルの第3層とは?

TCP/IPモデルは、ネットワークの動作の代替モデルです。TCP/IPモデルには7つの層の代わりに4つの層があります。

  1. アプリケーション層(OSIモデルの第5-7層に対応)
  2. トランスポート層(OSIモデルの第4層に対応)
  3. インターネット層(OSIモデルの第3層に対応)
  4. ネットワークアクセス/リンク層(OSIモデルの第1-2層に対応)

OSIモデルではなくTCP/IPモデルを参照すると、第3層 DDoS攻撃は第2層 DDoS攻撃となります。