# [Bash] Transférer un fichier

## Introduction

Si vous êtes dans un environnement restreint et que vous disposez seulement d'un shell, vous pouvez vous poser la question de comment transférer un fichier via le réseau. Heureusement, bash propose plusieurs solution pour palier ce problème.

![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-05/scaled-1680-/9N8image.png)

## Bash

Il est possible de transférer un fichier avec une méthode **Living Of The Land** en Bash :

```bash
HOST="127.0.0.1"; PORT="8000"; RESOURCE="/data.txt"; OUTPUT_FILE="data.txt"; exec 3<>/dev/tcp/$HOST/$PORT; echo -e "GET $RESOURCE HTTP/1.1\r\nHost: $HOST\r\nConnection: close\r\n\r\n" >&3; { while IFS= read -r line; do [[ $line == $'\r' ]] && break; done; cat; } <&3 > "$OUTPUT_FILE"; exec 3<&-; exec 3>&-
```

#### Netcat

Cet outil est pratique et présent sur de nombreuses distributions Linux.

Tout d'abord, mettez vous en écoute depuis la <span style="text-decoration: underline;">machine source</span> (qui envoie le fichier) :

```bash
nc -lp <PORT> < <FILE>
```

Puis réceptionnez le fichier depuis la <span style="text-decoration: underline;">machine cible</span> :

```bash
nc <SRC_IP> <PORT> > <FILE>
```