發(fā)個(gè)好玩的東東描融。
通過(guò)/dev/tcp、/dev/udp可以直接在shell腳本中發(fā)起tcp衡蚂、udp連接窿克,方便又高效骏庸,平時(shí)用于測(cè)試啥的還是挺方便的。
先看下bash man里面的介紹年叮,
/dev/tcp/host/port
If host is a valid hostname or Internet address, and port is
an integer port number or service? name,? bash? attempts? to
open a TCP connection to the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address, and port is
an integer port number or service? name,? bash? attempts? to
open a UDP connection to the corresponding socket.
接下來(lái)具被,我們實(shí)操一下。在一臺(tái)機(jī)器運(yùn)行服務(wù)端程序只损,打印客戶端消息一姿,具體代碼參考:基于TCP通信的簡(jiǎn)單服務(wù)端和客戶端程序。
另一端使用上述方法發(fā)起tcp連接跃惫,并發(fā)送消息叮叹,
可見,可使用以下shell命令發(fā)起tcp連接爆存,
exec 9>/dev/tcp/192.168.0.136/5000
其中9為執(zhí)行的文件描述符蛉顽。這里>重定向符表示該文件描述符只能寫入,如果想讀取先较,可使用一下命令携冤,
exec 9<>/dev/tcp/192.168.52.136/5000
至于關(guān)閉連接,則通過(guò)以下命令闲勺,
exec 9>&-
其中曾棕,9代表剛才創(chuàng)建的描述符。
關(guān)于 >&-的解釋菜循,可以參考bash的man手冊(cè)的REDIRECTION章節(jié)睁蕾,
REDIRECTION
? ...
? ? ? Each redirection that may be preceded by a file descriptor number may instead be preceded
? ? ? by? a word of the form {varname}.? In this case, for each redirection operator except >&-
? ? ? and <&-, the shell will allocate a file descriptor greater than 10 and assign it to? var‐
? ? ? name.? If? >&-? or? <&-? is preceded by {varname}, the value of varname defines the file
? ? ? descriptor to close.
因此,也可以用以下命令關(guān)閉連接债朵,
exec 9<&-