通過shell終端直接打開socket文件進行TCP、UDP通信(轉)


linux中有一個特殊的文件/dev/tcp,打開這個文件就類似於發出了一個socket調用,建立一個socket連接,讀寫這個文件就相當於在這個socket連接中傳輸數據。

打開/dev/tcp
以讀寫方式打開/dev/tcp,並指定服務器名為: www.csdn.net,端口號為:80,指定描述符為8

exec 8<>/dev/tcp/www.csdn.net/80

命令解讀:
exec表示執行該命令;8是用戶指定的文件描述符;<>應該被拆開為<>理解,表示讀和寫,即以RW的形式打開,打開設備為/dev/tcp/$DEST/80,這里選擇端口為80,因為希望發送HTTP請求,因此針對端口80。

注意:/dev/tcp本身是不存在的,無法在/dev下看到這個設備節點。
  • 實際上,這個設備節點不存在於系統中,在bash中通過打開/dev/tcp來取得socket的功能實際上是bash的特性,並不是系統的功能。
    1. 向文件中寫入數據
      向文件中隨便寫一些數據: echo -e “GET”>&8
echo -e "GET">&FD

解析:echo -e是以某種格式發出去(忘了-e是代表二進制還是ASCII了);>&表示流的流向,表示向哪個fd寫入,其中&的作用是區分>的大於號意義,>比較大小而>&表示流的定向。

讀文件
讀取返回的信息:cat<&8;如果HTTP請求被回應,這個時候應該能夠讀出一點<html>xxxx</html>出來。
Attention
有些版本的bash可能默認不支持對/dev/tcp的打開。此時可以在編譯bash的時候增加一個參數:--enable-net-redirections然后重新編譯bash即可。
————————————————
版權聲明:本文為CSDN博主「鎮上村樹」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/realDonaldTrump/article/details/84423450


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM