如何使用Netcat

Netcat是一個非常有用的Unix指令,我們可以使用它來執行各種網路任務,同時它也非常有用於除錯和學習事物的運作方式。 我們可以透過nc指令來使用Netcat。 使用以下語法連接到任何網路伺服器: nc DOMAIN PORT 例如: nc localhost 8000 一旦連接到伺服器,您可以輸入任何訊息,並且您將看到伺服器發送回的任何回覆。就像是一對一的簡單聊天,您可以在協定的應用層功能上進行工作(如HTTP、FTP、SMTP等)。 使用Netcat,您可以模擬所有這些驅動互聯網上應用程式層協定的協定。 您可以連接到Web伺服器並向其發送HTTP協定指令。例如,我可以使用nc flaviocopes.com 80連接到我的網站,並向其發送以下內容: GET / HTTP/1.1 Host: flaviocopes.com (第三行是一個空行) 伺服器將回覆,回覆中包含HTTP/1.1 301 Moved Permanently到https://flaviocopes.com/的重新定向回應,因為我強制使用HTTPS。 這裡是一個簡單的示例,用於與我單獨構建的“回显”伺服器進行交互,該服務器會將我們發送給它的內容返回: Netcat可以使用TCP(默認協議)或UDP進行操作。 要使用UDP,請添加-u選項: nc -u localhost 8000 您也可以創建一個伺服器。使用-l(listen)選項來聽取特定的埠口: nc -l PORT 然後Netcat將列印出接收到的每個命令。 嘗試在一個終端窗口上運行伺服器命令nc -l 8001,並在另一個終端窗口上運行客戶端命令nc localhost 8001,然後通過在客戶端終端窗口中輸入消息來向伺服器發送消息。 Netcat還可用於網路檢測。您可以在特定範圍內掃描伺服器的開放埠口: nc -v -z localhost 1-10000 提示:搭配使用grep過濾干擾訊息:nc -v -z localhost 1-10000 2>&1 | grep succeeded (如果您想知道使用特定埠口的進程,執行lsof -i :PORT) 您可以告訴nc伺服器將檔案的內容發送給連接的客戶端: nc -l PORT < FILENAME 使用nc DOMAIN PORT連接的客戶端將打印該檔案的內容,但它也可以使用nc DOMAIN PORT > FILENAME將內容保存到一個檔案中,從而實現基本的檔案傳輸。...

跨域資源共享(CORS)

介紹跨域資源共享,一種讓客戶端和服務器通信的方式,即使它們不在同一個域 在瀏覽器中運行的JavaScript應用程序通常只能訪問提供它的相同域名(源)上的HTTP資源。 加載圖片、腳本和樣式始終可以正常工作,但對另一個服務器的XHR和Fetch調用將失敗,除非該服務器實現了一種方法來允許該連接。 這種方法稱為CORS(Cross-Origin Resource Sharing,跨域資源共享)。 默認情況下,使用@font-face加載Web字體也需要跨域資源共享,還有其他一些不太常見的情況(例如WebGL紋理和Canvas API中加載的drawImage資源)。 在現代瀏覽器中,使用ES模塊(ES Modules)也需要CORS。 如果您沒有在服務器上設置允許提供第三方域的CORS策略,則請求將失敗。 Fetch示例: XHR示例: 如果跨域資源違反以下條件,則會失敗: 不同的域名 不同的子域名 不同的端口 不同的協議 這樣做是為了您的安全,以防止惡意用戶利用Web平台。 但是,如果您控制服務器和客戶端,則有足夠的理由讓它們互相通信。 如何實現呢? 這取決於您的服務器端堆棧。 瀏覽器支持 非常好(基本上所有瀏覽器,除了IE<10): 使用Express的示例 如果您使用Node.js和Express作為框架,請使用CORS中間件套件。 下面是一個簡單的Express Node.js服務器實現的例子: const express = require('express') const app = express() app.get('/without-cors', (req, res, next) => { res.json({ msg: '😞 沒有CORS,沒有派對!' }) }) const server = app.listen(3000, () => { console.log('已監聽端口 %s', server.address().port) }) 如果您從不同的源發起fetch請求並使用中間件函數來處理經過響應的端點請求處理程序,則可以使事情正常工作: const express = require('express') const cors = require('cors') const app = express() app....