用nc简单实现局域网文件传输并介绍XFTP

📅 2026/8/22 11:17:19
用nc简单实现局域网文件传输并介绍XFTP
目录前言ncnetcat简介实验记录更方便的工具XFTP补充网络可达环境环境变量端口的连接和监听前言在上一篇文章中我给一台旧笔记本装了 Kali 并打算用它去进行一些学习与实验所以目前我有两台物理机一台装载 Windows 系统用于日常应用一台装载 Kali-Linux 系统用于学习和实验。在用 Kali 机简单做了几个 CTF 的题目后我意识到一个小问题以往在虚拟机中使用 Kali 做实验后我直接截图就可以记录但现在是两台物理机我需要在 Kali 机上截图后发给我的 Windows 机。因为这两台物理机都连接同一个 WiFi 处于一个局域网内所以其实我要解决的其实就是局域网内的文件传输问题。因为我平时用 nc 工具比较多所以我第一个想到的就是它。但实际上有一些软件可以更加便捷、图形化界面的实现局域网内文件传输比如 XFTP 工具。所以本文会主要围绕着如何使用 nc 进行文件传输展开先介绍 nc 工具以及实验流程再介绍比较方便快捷的 XFTP 软件和它的使用最后再补充一些原理相关内容。ncnetcat简介ncnetcat是一个网络工具它可以扫描端口、建立 TCP/UDP 网络连接、监听端口并进行数据收发。通过将监听端口的一端充当服务端主动连接的一端充当客户端在两台物理机上使用 nc 工具可以非常方便地建立简单的 C/S 通信。实验记录在开始使用 nc 工具进行局域网内文件传输前首先需要通信的两个物理机上安装有nc对于Kali机已经预装对于 Windows 机则需要手动下载并配置。在这个网址下载适用于 Windows 平台的 nc netcat 1.11 for Win32/Win64由于这个工具算比较出名的黑客工具会被某些杀毒软件识别并自动删除所以我们需要给它添加到杀软白名单。比如我使用的是火绒那么我就在它的信任区即白名单添加一个文件夹进去这样我放在这个文件夹里的文件就不会被自动扫描并删除从而可以把 nc 工具放在该文件夹中。接下来去刚刚的网址下载并解压到这个白名单文件夹中进入解压后的目录记住路径在后面我们需要将之添加到环境变量中可以点一下上面的路径框然后复制它。接下来去添加环境变量可以直接搜索“环境变量”后打开配置页面。点击环境变量。选中 Path 这个变量然后点击编辑。点击新建然后在左侧新建的路径中粘贴我们刚刚复制的路径。接下来 winr 键入 cmd 呼出命令行窗口测试一下配置是否成功键入 nc 如下则成功。同理 Kali 机也用同样的方法测试nc是否配置成功。现在两台物理机上都有了 nc 工具接下来简单测试 nc 工具的聊天功能。先介绍一下实验的网络环境两台物理机连接同一个 WiFi 并被分配了内网 IP实现了同处一个局域网下的网络可达。在 Windows 机使用 ipconfigKali 机使用 ifconfig 来查询双方目前的内网 IP 是多少以获取对方的IP 地址。可以看到 Windows 机内网 IP 为 192.168.1.3Kali 机内网 IP 为 192.168.1.17。互 ping 对方可以 ping 通。接下来在 Kali 机上使用 nc 监听 1212 端口这里选择 1212 作为实验端口一般来说可以使用任意端口只要该端口没有被其他程序占用即可一般会用 8080 或者 8888我比较喜欢 12 这个数字代码如下nc -l -p 1212Windows 机用 nc 连接 Kali 机的 nc 监听端口即 1212 端口如果出现一直闪烁的提示符说明已经连接代码如下nc 192.168.1.17 1212键入字符串并回车即可进行简单聊天。在 Kali 机上可以看到这个从 Windows 机发送来的字符串输入回复字符串后在 Windows 机上实时同步。Ctrl C 结束这个测试。接下来我们测试文件传输nc 本身并没有“文件传输”的命令我们的思路是将 Windows 机作为服务端监听一个端口Kali 机作为客户端连接该端口建立网络通信。同时使用重定向将文件作为该通信的输入输出对 Windows 机重定向从监听端口来的数据到一个新的文件上对 Kali 机将一个文件重定向为 nc 的输入从而将文件作为通信内容发送。具体实现如下Windows 机监听一个端口并且重定向从该连接传输来的数据到一个新的文件上若没有该文件则创建若有则覆盖。比如在本次实验中我想要从 Kali 机发送一个 .txt 格式的文件过来并将之上传到 Windows 机的D盘下面的nc文件夹里那么我就重定向从该连接来的数据到 D:\nc\from_kali.txt 代码如下nc -l -p 1212 D:\nc\from_kali.txt接下来 Kali 机连接该端口并将想要发送的文件重定向为输入代码如下nc 192.168.1.3 1212 flag1.txtWindows 机打开文件管理器进入 D 盘的 nc 文件夹可以看到在我们指定的位置将该文件以from_kali.txt 的文件名保存下来了。当然如果想要一次性传输多个文件的话那就在 Kali 机上用 tar -zcvf 将多个文件打包并压缩再把打包压缩后的文件传过来就好了。在实验的最后对上述代码做一个简单解释我们用两行命令完成了文件传输 nc 本身并没有专门的“发送文件”或“接收文件”参数或命令我们其实是利用 Shell 的标准输入输出重定向把文件内容作为我们的通信数据接入网络连接同理 Windows 把来自网络连接的数据重定向为一个文件作为输出以实现“接受文件”的逻辑。更方便的工具XFTPXFTP官网XFTP – NetSarang Website之前在去机房给服务器上传并安装补丁文件时会用到一个工具叫做 XFTP。XFTP 是一个图形化文件传输客户端可以通过 SFTP 等基于 SSH 的协议连接服务器。用户完成身份认证后可以在图形界面中浏览远程文件系统并进行文件上传、下载等操作。具体工作流程取决于服务器厂商的管理方式。以我之前接触的一些服务器和安全设备为例服务器会提供独立的带外管理接口比如 mnt 口、mgmt 口或者直接用 eth0 口做管理口将笔记本通过网线连接到服务器的管理网口根据服务器文档配置本地网络地址使两者处于同一网段然后通过浏览器访问管理口提供的 web 管理界面以 web 管理页面的管理员账号登录管理面板启用 SSH 服务。随后根据设备文档确定 SSH 服务对应的 IP 地址和监听端口在 XFTP 中配置该地址和端口使用服务器管理员用户登录即可进行文件的上传与下载。说回我们的实验环境在本次 Kali 机环境中SSH 服务默认没有启动因此需要先配置并启动 SSH 服务之后才能让 XFTP 通过 SSH/SFTP 连接到 Kali 。在 Kali 机上使用 root 用户或者 sudo vim 打开 sshd_config 文件配置 SSH 服务代码如下vim /etc/ssh/sshd_config找到如下图所示的 PermitRootLogin 字段取消掉它的注释并将后面的参数修改为 yes 编辑好后保存退出。PermitRootLogin 字段控制是否允许 root 用户通过 SSH 登录本实验为了方便直接使用 root 登录因此开启。实际生产环境通常不建议允许 root 直接 SSH 登录。接下来开启 sshd 服务在 shell 中键入如下命令service ssh start或者systemctl start ssh当然这里是因为实验环境第一次开启 sshd 服务。正常而言如果已经启用 sshd 服务想要通过修改配置文件让 root 用户可以通过 SSH 登录那么在修改完成保存退出后使用如下命令重启 sshd 服务让它重新读取修改后的配置文件内容service ssh restart或systemctl restart ssh接下来使用如下命令检查是否开启 SSH服务service ssh status或者systemctl status sshActive 这一栏展示了 sshd 服务的运行情况active 就是正在运行。此时 Kali 机已开启 sshd 服务。Windows 机启动 XFTP左上角点击新建一个会话配置名称和主机。名称就是这个会话在 XFTP 里显示的名称用于区分多个会话。主机是目标物理机的 IP 地址这里则是 Kali 机的 IP 地址。下面的端口号根据具体情况来比如你要连接的服务器它的 sshd 服务监听的端口不是 22 端口而是别的端口则在这里选择相应的监听端口。接下来选择这个会话点击连接。这里会有要选择一次性接受还是保存并接受。第一次通过 SSH 连接服务器时XFTP 会提示确认服务器的主机密钥。选择“一次性接受”表示只在本次连接中信任该主机密钥选择“保存并接受”则会将其保存后续再次连接时可以用于校验服务器身份。这里就选择一次性接受。用户名是服务器的用户账号这里使用 root 登录。身份验证方式我们选择密码验证也就是使用 root 用户的密码进行登录。左边是 Windows 机的文件系统右边是 Kali 机的文件系统双击即可进入目录右键一个文件可以选择将它传输到另一台物理机上或者删除。比如这里我进入 Kali 机的 /home/user/documents 目录后左侧进入 Windows 机的 D:\nc 目录右键 flag1.txt 选择传输后会将文件从 Kali 机上传到 Windows 机的目录即 D:\nc。补充网络可达环境本文所说的“网络可达”是指两台设备之间已经具备进行网络通信的基本条件可以通过有线或无线网络建立 IP 层通信。对应日常工作中常说的“先 ping 一下看看网络通不通”。实现网络可达环境有多种方法。第一种就是通过无线介质实现网络可达。两台物理机连接同一个 WiFi此时它们同处一个内网被现代家用/企业 WiFi 设备或专门 DHCP 服务器分配了内网 IP如果该无线网络没有启用客户端隔离等访问限制那么这两台物理机设备则可以通过该 WiFi 使用被分配的内网 IP 实现内网通信从而网络可达。本文环境即是如此。第二种则是通过网线介质实现网络可达。比如在机房使用笔记本直连服务器的场景通过网线连接笔记本的以太网口和服务器的以太网口然后进入笔记本网络配置页面选中提供以太网接口的网卡手动分配 IP 地址使两台设备处于同一个子网从而可以通过网线直接进行通信实现内网互通网络可达。第三种是通过互联网进行跨网络通信。例如访问网站、联网游戏、远程登录服务器等数据包经过多个路由器在不同网络之间转发最终到达目标设备。Ping 是一种常用的网络诊断命令基于 ICMP 协议即通过发送 ICMP Echo Request 报文并等待目标返回 ICMP Echo Reply 报文并接收来测试目标 IP 地址的连通性。在一台设备上 ping 另一台设备如果能够正常收到响应说明当前 ICMP 报文可以从本机到达目标并返回因此可以认为两台设备之间的 IP 层通信是正常的。需要注意的是ping 通只代表 ICMP 通信正常并不代表目标设备上的所有网络服务都可以访问。例如目标设备可能允许 ICMP但通过防火墙阻止 TCP 22 端口。因此在实际排查网络问题时ping 通以后还需要进一步检查目标端口和对应的服务是否正常。环境变量环境变量是进程运行环境中由名称和值组成的一组变量。比如PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binHOME/home/userSHELL/bin/bash我们以 PATH 为例解释它的作用。PATH 是用于记录可执行程序搜索路径的环境变量。比如我在 Linux 的 shell 里面键入一个 lsshell 会根据 PATH 中记录的路径查找可执行文件然后请求操作系统执行它。ls 在常见的 Linux 系统中是一个 ELF 格式的可执行文件通常位于 /usr/bin/ls。因此当我们向 shell 输入 ls 时shell 会按照 PATH 中目录的顺序依次寻找名为 ls 的可执行文件找到后再请求操作系统执行。说回在 Windows 上给 nc 配置环境变量因为我们使用 nc 的方式是在命令行界面中直接输入 nc此时如果 nc.exe 所在的文件夹没有加入 PATH命令行环境就无法在已有的搜索路径中找到 nc.exe从而无法直接执行。把 nc.exe 所在的文件夹路径添加到 PATH 后再在命令行中输入 nc命令行环境就可以根据 PATH 找到 nc.exe 并执行它。端口的连接和监听在上述实验过程中无论是 nc 还是 XFTP都涉及网络通信中的端口以及通信两端常见的两种行为监听与连接。进程想要使用网络进行通信或者说建立一个网络连接就需要在本机上占用一个端口。服务端进程通常可以自己指定占用某个端口而客户端进程则通常由操作系统自动分配一个临时端口。端口用于识别通信进程在同一个网卡上发送出去的数据都是以这个网卡 IP 为源地址所有使用该网卡的网络应用进程都会用这个 IP 地址发送数据包此时当网络数据到达目标主机后操作系统会根据目标 IP、传输层协议和目标端口等信息将数据交给对应的网络应用。在使用 nc 时充当服务端的物理机使用 nc 监听一个端口此时运行在服务端物理机上的 nc 进程占用该端口并等待连接建立。充当客户端的物理机在命令行中使用 nc 连接服务端物理机的某个端口时客户端物理机的 nc 进程会创建一个 TCP socket并由操作系统为其分配一个临时端口然后向服务端物理机的端口发起 TCP 连接三次握手完成后两台主机之间建立 TCP 连接。这个TCP连接可以由源 IP、源端口、目标 IP 和目标端口共同确定也即我们所说的用源 IP、源端口、目标 IP、目标端口四元组标记网络上的一个网络连接。在使用 XFTP 时服务端物理机开启 sshd 服务即让 sshd 进程监听服务端的 TCP 22 端口并等待连接。客户端启动 XFTP配置服务端 IP 地址和 SSH 端口后发起连接。客户端操作系统会为本次 TCP 连接分配一个临时端口随后与服务端的 22 端口进行 TCP 三次握手。TCP 连接建立后XFTP 再通过 SSH 协议完成服务器身份验证和用户身份认证认证成功后即可通过 SFTP 协议进行文件传输。ncXFTP服务端进程ncsshd服务端端口实验中的 1212默认 22客户端进程ncXFTP客户端端口操作系统自动分配操作系统自动分配传输基础TCPSSH/SFTP over TCPTCP 三次握手有有身份认证无SSH 身份认证加密默认无SSH 提供加密文件传输操作依靠重定向图形化文件管理