‘壹’ 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协议栈对你的数据进行封装以及路由转发。