socat ユーティリティは、2 つの独立したデータチャネル間で双方向データ転送を行うためのリレーです。
socat が接続できるチャネルには、次のような多くの種類があります:
- ファイル
- パイプ
- デバイス (シリアルライン、疑似ターミナルなど)
- ソケット (UNIX、IP4、IP6 - raw、UDP、TCP)
- SSL ソケット
- プロキシ CONNECT 接続
- ファイル記述子 (stdin など)
- GNU ラインエディタ (readline)
- プログラム
- これら 2 つの組み合わせ
このツールは netcat の高度なバージョンと見なされています。これらは同様の機能を持ちますが、socat はポートで複数のクライアントをリスンしたり、接続を再利用したりするなど、より多くの追加機能を備えています。
socat が必要な理由
socat を効果的に使用する方法はたくさんあります。以下にいくつかの例を挙げます:
- TCP ポートフォワーダー (ワンショットまたはデーモン)
- 外部 Socksifier
- 弱いファイアウォールを攻撃するツール (セキュリティおよび監査)
- Unix ソケットへのシェルインターフェイス
- IP6 リレー
- TCP 指向のプログラムをシリアルラインにリダイレクト
- 異なるコンピュータ上のシリアルラインを論理的に接続
- ネットワーク接続を使用してクライアントまたはサーバーのシェルスクリプトを実行するための、比較的安全な環境 (su および chroot) の構築
[ 今すぐダウンロード: 自動化に関するシステム管理者ガイド ]
socat の使用方法
socat の構文は非常にシンプルです:
socat [options] <address> <address>動作させるには、送信元と送信先のアドレスを指定する必要があります。これらのアドレスの構文は次のとおりです:
protocol:ip:portsocat の使用例
さまざまな接続に socat を使用する基本的な例から始めましょう。
1. ローカルまたはリモートシステムの TCP ポート 80 に接続する:
# socat - TCP4:www.example.com:80この場合、socat は STDIO (-) と、www.example.com というホストのポート 80 への TCP4 接続の間でデータを転送します。
2. socat を TCP ポートフォワーダーとして使用する:
単一の接続の場合は、次のように入力します:
# socat TCP4-LISTEN:81 TCP4:192.168.1.10:80複数の接続の場合は、以下の例のように fork オプションを使用します:
# socat TCP4-LISTEN:81,fork,reuseaddr TCP4:192.168.1.10:80この例では、ポート 81 でリスンして接続を受け入れ、その接続をリモートホストのポート 80 に転送します。
# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock 上記の例では、ポート 3307 でリスンして接続を受け入れ、その接続をリモートホストの Unix ソケットに転送します。
[ Linux 環境を管理して成功を収める方法については、こちらをご覧ください。 ]
3. シンプルなネットワークベースのメッセージコレクターを実装する:
# socat -u TCP4-LISTEN:3334,reuseaddr,fork OPEN:/tmp/test.log,creat,appendこの例では、クライアントがポート 3334 に接続すると、新しい子プロセスが生成されます。クライアントから送信されたすべてのデータは、ファイル /tmp/test.log に追記されます。ファイルが存在しない場合、socat がそれを作成します。reuseaddr オプションにより、サーバープロセスを即座に再起動できます。
4. ローカルネットワークにブロードキャストを送信する:
# socat - UDP4-DATAGRAM:224.255.0.1:6666,bind=:6666,ip-add-membership=224.255.0.1:eth0この場合、socat は stdin から、ローカル接続とリモート接続の両方でポート 6666 を使用する UDP を介して、指定されたマルチキャストアドレスにデータを転送します。また、このコマンドはインターフェイス eth0 に対し、指定されたグループのマルチキャストパケットを受け入れるように指示します。
socat の実用的な用途
socat はトラブルシューティングに最適なツールです。また、リモート接続を簡単に作成するのにも便利です。実際、私はリモート MySQL 接続に socat を使用したことがあります。以下の例では、ローカルソケットを介して接続することで、Web アプリケーションをリモート MySQL サーバーに接続する方法を示します。
1. リモート MySQL サーバーで、次のように入力します:
# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock &このコマンドは socat を起動し、ポート 3307 を使用してリスンするように設定します。
2. Web サーバーで、次のように入力します:
# socat UNIX-LISTEN:/var/lib/mysql/mysql.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 TCP:192.168.100.5:3307 &上記のコマンドは、ポート 3307 を使用してリモートサーバー 192.168.100.5 に接続します。
ただし、すべての通信は Unix ソケット /var/lib/mysql/mysql.sock で行われるため、ローカルサーバーであるかのように見えます。
まとめ
socat は高度なユーティリティであり、あらゆるシステム管理者にとって業務の遂行やトラブルシューティングに役立つ優れたツールです。socat の使用例の詳細については、こちらのリンク先を参照してください。
[ 無料オンラインコース: Red Hat Enterprise Linux 技術概要 ]
執筆者紹介
I work as Unix/Linux Administrator with a passion for high availability systems and clusters. I am a student of performance and optimization of systems and DevOps. I have passion for anything IT related and most importantly automation, high availability, and security.
類似検索
More than meets the eye: Behind the scenes of Red Hat Enterprise Linux 10 (Part 5)
Announcing general availability of SQL Server 2025 on Red Hat Enterprise Linux 10
The Overlooked Operating System | Compiler: Stack/Unstuck
Linux, Shadowman, And Open Source Spirit | Compiler
チャンネル別に見る
自動化
テクノロジー、チームおよび環境に関する IT 自動化の最新情報
AI (人工知能)
お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート
オープン・ハイブリッドクラウド
ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。
セキュリティ
環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報
エッジコンピューティング
エッジでの運用を単純化するプラットフォームのアップデート
インフラストラクチャ
世界有数のエンタープライズ向け Linux プラットフォームの最新情報
アプリケーション
アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細
仮想化
オンプレミスまたは複数クラウドでのワークロードに対応するエンタープライズ仮想化の将来についてご覧ください