国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Linux|Centos|Ubuntu|系統(tǒng)進(jìn)程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務(wù)器之家 - 服務(wù)器系統(tǒng) - Linux - linux shell 腳本實(shí)現(xiàn)tcp/upd協(xié)議通訊(重定向應(yīng)用)

linux shell 腳本實(shí)現(xiàn)tcp/upd協(xié)議通訊(重定向應(yīng)用)

2020-04-02 19:19Linux教程網(wǎng) Linux

前幾天發(fā)了重定向以及管道相關(guān)使用方法,今天這里發(fā)些很有趣的例子。通過重定向?qū)崿F(xiàn)基于tcp/udp協(xié)議的軟件通訊。

linux 設(shè)備里面有個(gè)比較特殊的文件:
/dev/[tcp|upd]/host/port 只要讀取或者寫入這個(gè)文件,相當(dāng)于系統(tǒng)會嘗試連接:host 這臺機(jī)器,對應(yīng)port端口。如果主機(jī)以及端口存在,就建立一個(gè)socket 連接。將在,/proc/self/fd目錄下面,有對應(yīng)的文件出現(xiàn)。
一、測試下:/dev/tcp/host/post文件

復(fù)制代碼

代碼如下:


[chengmo@centos5 shell]$ cat</dev/tcp/127.0.0.1/22
SSH-2.0-OpenSSH_5.1
#我的機(jī)器shell端口是:22
#實(shí)際:/dev/tcp根本沒有這個(gè)目錄,這是屬于特殊設(shè)備
[chengmo@centos5 shell]$ cat</dev/tcp/127.0.0.1/223
-bash: connect: 拒絕連接
-bash: /dev/tcp/127.0.0.1/223: 拒絕連接
#223接口不存在,打開失敗
[chengmo@centos5 shell]$ exec 8<>/dev/tcp/127.0.0.1/22
[chengmo@centos5 shell]$ ls -l /proc/self/fd/
總計(jì) 0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 0 -> /dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 1 -> /dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 2 -> /dev/pts/0
lr-x------ 1 chengmo chengmo 64 10-21 23:05 3 -> /proc/22185/fd
lrwx------ 1 chengmo chengmo 64 10-21 23:05 8 -> socket:[15067661]
#文件描述符8,已經(jīng)打開一個(gè)socket通訊通道,這個(gè)是一個(gè)可以讀寫socket通道,因?yàn)橛茫?quot;<>"打開
[chengmo@centos5 shell]$ exec 8>&-
#關(guān)閉通道
[chengmo@centos5 shell]$ ls -l /proc/self/fd/
總計(jì) 0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 0 -> /dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 1 -> /dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 2 -> /dev/pts/0
lr-x------ 1 chengmo chengmo 64 10-21 23:08 3 -> /proc/22234/fd


二、通過重定向讀取遠(yuǎn)程web服務(wù)器頭信息

復(fù)制代碼

代碼如下:


#!/bin/sh
#testhttphead.sh
#實(shí)現(xiàn)通過主機(jī)名,端口讀取web 服務(wù)器header信息
#copyright chengmo,qq:8292669
if(($#<2));then
echo "usage:$0 host port";
exit 1;
fi
#如果參數(shù)缺失,退出程序,返回狀態(tài)1
exec 6<>/dev/tcp/$1/$2 2>/dev/null;
#打開host的port 可讀寫的socket連接,與文件描述符6連接
if(($?!=0));then
echo "open $1 $2 error!";
exit 1;
fi
#如果打開失敗,$?返回不為0,終止程序
echo -e "HEAD / HTTP/1.1\n\n\n\n\n">&6;
#將HEAD 信息,發(fā)送給socket連接
cat<&6;
#從socket讀取返回信息,顯示為標(biāo)準(zhǔn)輸出
exec 6<&-;
exec 6>&-;
#關(guān)閉socket的輸入,輸出
exit 0;


腳本建立后:存為testhttphead.sh
運(yùn)行結(jié)果:

復(fù)制代碼

代碼如下:


[chengmo@centos5 ~/shell]$ sh testhttphead.sh www.baidu.com 80
HTTP/1.1 200 OK
Date: Thu, 21 Oct 2010 15:17:23 GMT
Server: BWS/1.0
Content-Length: 6218
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Thu, 21 Oct 2010 15:17:23 GMT
Set-Cookie: BAIDUID=1C40B2F8C676180FD887379A6E286DC1:FG=1; expires=Thu, 21-Oct-40 15:17:23 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Connection: Keep-Alive
[chengmo@centos5 ~/shell]$ sh testhttphead.sh 127.0.0.1 8080
open 127.0.0.1 8080 error!


突然有個(gè)奇怪想法:
我們在windows時(shí)代就通過telnet 可以實(shí)現(xiàn)tcp/upd協(xié)議通訊,那么如果用傳統(tǒng)方法怎么實(shí)現(xiàn)呢?

復(fù)制代碼

代碼如下:


[chengmo@centos5 ~/shell]$ echo -e "HEAD / HTTP/1.1\n\n\n\n\n"|telnet www.baidu.com 80
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is '^]'.
Connection closed by foreign host.
#直接給發(fā)送,失敗
[chengmo@centos5 ~/shell]$ (telnet www.baidu.com 80)<<EOF
HEAD / HTTP/1.1
EOF
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is '^]'.
Connection closed by foreign host.
#重定向輸入,還是失敗?


找到正確方法:

復(fù)制代碼

代碼如下:


[chengmo@centos5 shell]$ (echo -e "HEAD / HTTP/1.1\n\n\n\n\n";sleep 2)|telnet www.baidu.com 80
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is '^]'.
HTTP/1.1 200 OK
Date: Thu, 21 Oct 2010 15:51:58 GMT
Server: BWS/1.0
Content-Length: 6218
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Thu, 21 Oct 2010 15:51:58 GMT
Set-Cookie: BAIDUID=0B6A01ACECD5353E4247E088A8CB345A:FG=1; expires=Thu, 21-Oct-40 15:51:58 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Connection: Keep-Alive
#成功了!加入sleep 居然可以了,sleep 改成1秒也可以


是不是由于sleep后,echo會推出2秒發(fā)給通道:telnet呢?推論可以從這2個(gè)方面推翻:
一個(gè)方面:通過()括的數(shù)據(jù)是一對命令,會作為一個(gè)子命令執(zhí)行,一起執(zhí)行完程序結(jié)束。每個(gè)命令echo語句,就直接發(fā)送到屏幕(也就是標(biāo)準(zhǔn)輸出),只要有標(biāo)準(zhǔn)輸出了,就會通過通道馬上傳個(gè):telnet ,如果接下來命令還有輸出,會注意傳給telnet ,直到()內(nèi)所有命令執(zhí)行完,與通道連接就斷開了。

再一個(gè)方面:如果說是起到推遲發(fā)送的話,什么時(shí)候有數(shù)據(jù)過來,發(fā)給telnet,什么時(shí)候telnet命令啟動。跟你推遲一點(diǎn)還是早一點(diǎn)發(fā)送過來。沒有關(guān)系。

這種類型命令,看出sleep,其實(shí)就是保持通道跟telnet 連接2秒鐘。 通道連接著了,telnet終端輸入也還在,因此可以保持從baidu服務(wù)器獲得數(shù)據(jù)。
所以,延遲多久,還是跟服務(wù)器處理速度有關(guān)系。

如果通過echo 向telnet發(fā)送數(shù)據(jù),保持通道聯(lián)通,使用sleep是個(gè)很好方法。
通過重定向給telnet輸入?yún)?shù)這種方法,我還想不到怎么樣實(shí)現(xiàn)延遲輸入。有知道朋友,可以指點(diǎn)指點(diǎn).
區(qū)別:
telnet與echo 實(shí)現(xiàn) http訪問,與通過打開讀寫socket是不一樣的,打開socket通道,是可以進(jìn)行交換處理的。傳入命令,活動結(jié)果,再傳入命令,再獲得結(jié)果。telnet通過echo 就不能這樣處理了。
三、通過shell腳本重定向?qū)崿F(xiàn)監(jiān)控memcache狀態(tài)

復(fù)制代碼

代碼如下:


#!/bin/sh
#通過傳入ip 以及端口,發(fā)送指令獲得返回?cái)?shù)據(jù)
#copyright chengmo qq:8292669
#函數(shù)往往放到最上面
function sendmsg()
{
msg=$1;
echo "$1">&8;
getout;
}
#向socket通道發(fā)送指令,并且調(diào)用獲得返回參數(shù)
function getout()
{
#read 命令 -u 從打開文件描述符 8 讀取數(shù)據(jù),-d讀取數(shù)據(jù)忽略掉:\r換行符
while read -u 8 -d $'\r' name;
do
if [ "${name}" == "END" -o "${name}" == "ERROR" ];then
break;
fi;
echo $name;
done
}
#由于:memcached每次通訊完畢,會返回:END或者ERROR(出錯(cuò)),通過判斷是否是"END"覺得讀取是不是結(jié)束,否則循環(huán)不會停止
if [ $# -lt 2 ];then
echo "usage:$0 host port [command]";
exit 1;
fi;
[[ $# -gt 2 ]]&&command=$3;
#設(shè)置默認(rèn)值 如果command為定義則為:stats
command="${command=stats}";
host="$1";
port="$2";
exec 8<>/dev/tcp/${host}/${port};
#打開通向通道是8
if [ "$?" != "0" ];then
echo "open $host $port fail!";
exit 1;
fi
sendmsg "$command";
#發(fā)送指定命令
sendmsg "quit";
#發(fā)送退出通向命令
exec 8<&-;
exec 8>&-;
#關(guān)閉socket通道
exit 0;


這是通過重定向,實(shí)現(xiàn)socket通訊中,發(fā)送然后獲取返回的例子。其實(shí),上面代碼看似一次只能發(fā)送一段。時(shí)間上。我們可以反復(fù)調(diào)用:sendmsg ,捕捉輸出數(shù)據(jù)。實(shí)現(xiàn)連續(xù)的,讀與寫操作。
實(shí)例截圖:

其它實(shí)現(xiàn)方法:
其實(shí)通過:telnet也可以實(shí)現(xiàn)的。
[chengmo@centos5 shell]$ (echo "stats";sleep 2)|telnet 127.0.0.1 11211
通過nc命令實(shí)現(xiàn):
[chengmo@centos5 shell]$ (echo "stats")|nc 127.0.0.1 11211
不需要加延遲,直接打開通道
第二個(gè)程序里面,看到shell完全可以處理交互設(shè)計(jì)了。如果按照這樣,登陸ftp,pop3,stmp都可以類似實(shí)現(xiàn)。這些,我們通過shell socket類似程序?qū)崿F(xiàn),應(yīng)該不困難,只是捕捉如發(fā)送解析的問題了。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲一区二区三区视频 | 欧美在线观看一区 | 免费日韩 | 一区二区成人网 | 一区二区三区在线不卡 | 久久成人精品 | 91精品视频在线播放 | 免费久草 | 精品国产成人在线 | 天天干天天骑 | 久久久无码精品亚洲日韩按摩 | 免费网站在线 | 一级黄色片视频 | 欧美日一区 | 久久精品在线 | 国产精品亚洲视频 | 亚洲小视频 | 久久国产精品久久久久久电车 | 91视频一88av | 黄色网日本 | 日韩欧美中文在线 | 狠狠搞狠狠干 | 亚洲国产一区二区三区精品 | 欧美激情免费 | 日本一区免费 | 欧美一级片在线 | 亚洲男人av | 成人免费在线观看视频 | 国产中文字幕在线 | 黄色片com | 欧美日韩第一页 | 欧美久久久久久 | 黄色毛片一级 | 成人激情在线 | 国产伦精品一区二区三区 | 91精品一久久香蕉国产线看观看新通道出现 | 久久av资源 | 亚洲一区二区三区 | 四虎久久| 日韩精品免费视频 | 高清一区二区三区 |