『壹』 Socket通信中套接字和shell是什麼關系呀套接字是實現應用程序和內核治療溝通的,而sh
socket和shell基本沒啥關系,socket可以是由os提供的api,而shell可以算是一個應用程序,提供人機交互功能,本質上也是使用的os的api
『貳』 shell啟動socket
nc -l localhost 3000 server
nc localhost 3000 client
簡單的Socket協議腳本的編寫方法。
1.socket協議介紹
Socket協議有萬能協議之稱,很多系統底層都是用的socket協議,用處十分廣泛。
1.1 Socket通訊方式說明
與socket通訊有兩種方式,一種是建立長連接,建立後不停的發送,接收;另一種是建立短連接,即建立連接發送報文,接收報文關閉連接
1.2 Socket協議發送的buf類型介紹
Send buffer類型分為字元串和xml類型
1.3 Socket協議腳本編寫前提:
與項目組溝通,確認是否是socket協議,由項目組提供伺服器IP和埠號還有socket協議交易的報文發送及接收報文對,及交易介面文檔,了解清楚報文的數據長度,參數化欄位,結構,代表什麼等,了解清楚後進行socket協議腳本的開發。
1.4、Socket協議腳本函數說明及實例:
1)名稱 lrs_create_socket();
創建socket連接,添加IP和埠號,如果創建成功返回值為0,反之則返回為非0數值。(對於長連接,建立socket連接放在vuser_init函數中,短連接放在Action中即可) 實例: lrs_create_socket("socket0","TCP","RemoteHost=180.170.150.230:7700", LrsLastArg);
2)名稱 lrs_send();
發送socket請求消息,取緩沖區buf0的報文並發送。
實例: lrs_send("socket0","buf1",LrsLastArg);
3)名稱 lrs_receive();
接收socket的響應報文,放置buf1中。
實例:lrs_receive("socket0","buf2",LrsLastArg);
4)名稱 lrs_get_last_received_buffer();
獲取最後收到的buffer和大小,其中將最後收到的buffer的值賦給RecvBuf變數,將大小賦值給RecvLen。
實例: lrs_get_last_received_buffer("socket0",&recvBuf,&recvLen);
5)名稱 lrs_free_buffer();
為防止內存泄露,釋放內存空間。
實例: lrs_free_buffer(recvBuf);
6)名稱 lrs_close_socket();
關閉Socket連接,(對於長連接,關閉socket連接應放在vuser_end函數中)
實例: lrs_close_socket("socket0");
其他常用的Socket函數:
lrs_set_send_buffer("socket0", sSendPkg, iLenOfPkg );//指定要發送的socket信息
lrs_get_buffer_by_name("buf0", sSendPkg, iLenOfPkg);// 獲取收到的buffer和大小
lrs_length_send("socket0","buf0",1,"Size=4","Encoding=1",LrsLastArg);
關聯函數:
lrs_save_param_ex("socket0","received","",151,7,"ascii","response");//取指定位置字元串保存到變數,以便判斷事務是否成功
lrs_save_searched_string();//在指定位置搜索字元串,將出現的字元串報錯到參數中
超時函數
lrs_set_connect_timeout();//設置連接超時時間
lrs_set_recv_timeout();//設置伺服器響應超時時間
lrs_set_recv_timeout2();//設置接收
『肆』 xshell發送報文返回的報文是那些
轉載於:https://www.cnblogs.com/144823836yj/p/10549430.html。
_グ治_P報文結構 萬次閱讀 2017-06-30 15:45:17 使用tcpmp查看IP數據報 在linux中使用tcpmp抓取數本地環路上的數據包,
『伍』 在Shell中打開Server Socket
工作中的一個需求 需要為一個現存的功能 提供Web訪問界面 由於這個功能是用Shell編寫的 首先想到的解決方案是通過在Shell中開啟一個Server Socket 來實現一個簡單的HTTP伺服器 提供給瀏覽器訪問 我並不需要實現所有的HTTP協議 只要能夠處理特定的GET請求即可 這個簡單的HTTP伺服器將會從瀏覽器發送的GET請求中截取指定參數 然後通過系統調用執行現存的Shell腳本 在網上查找了一下Shell Socket的相關信息 發現實現技術還挺多 摘錄了兩種方法(為簡明起見 所列代碼做了簡化) 記錄於此以備忘
Perl
use strict;
use IO::Socket;
my $server_socket = IO::Socket::INET >new
(
LocalPort =>
Listen => SOMAXCONN
Proto => tcp
Reuse =>
Timeout =>
) or die SERVER SOCKET ERROR!n ;
while( ) {
next unless my $connection = $server_socket >accept;
my $url = get_url($connection);
if ($url =~ /^ */(?param=( *))?$/) {
if ($ ) {
system(( myshell $ )); #myshell是現有功能的shell程序
}
send_page($connection);
} else {
send_ ($connection);
}
$connection >close;
}
sub send_ {
my $sock = shift;
print $sock HTTP/ NOT FOUND NOT FOUND ;
}
sub send_page {
my $sock = shift;
my $ = HTTP/ OK Content Type: text/; charset=UTF
<><head><meta equiv= Content Type content= text/; charset=UTF />
<title></title></head><body><form method= get ><input type= text name= param />
<input type= submit value= Submit /></form></body></> ;
print $sock $;
}
sub get_url {
my $sock = shift;
my $line = ;
while(($line = <$sock>) ne )
{
if ($line =~ /GET ([^ ]+) /) {
return $ ;
}
}
return ;
}
保存腳本為appserver pl 以 perl appserver pl & 啟動 然後用瀏覽器訪問: / //<ip>: /即可 由於Linux發行版上一般都自帶Perl 這個方法的適用性還是比較普遍 不過需要熟悉一點Perl語法
nc命令
while(/bin/true)
do
nc l p c $(cat /path/to/myshell) #myshell從標准輸入讀取請求 將響應列印到標准輸出
done
這種方式可以完全通過shell來實現 相對簡潔 但要求nc支持 c選項 且myshell必須是sh語法(不能使用bash) 如果把shell腳本換成二進製程序 可以使用 e選項 不過有些Linux發行版上默認的nc不支持 c和 e選項(在ubuntu desktop和RHEL上就不行 但在ubuntu server上可以)
lishixin/Article/program/Java/hx/201311/26300
『陸』 linux下socket客戶端怎麼分包發送數據,以及報文,
socket系列的函數都是系統調用,你只要指定要傳輸的數據、對端IP、埠,socket介面會陷入內核,通過TCP/IP協議棧對你的數據進行封裝以及路由轉發。