免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6612 | 回复: 24
打印 上一主题 下一主题

用perl的SOCKET模拟登陆设备遇到的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-30 11:13 |只看该作者 |倒序浏览
本帖最后由 wbc1223 于 2014-05-30 13:51 编辑

我现在想通过登陆厂家的硬件设备,执行指令把设备的反馈的结果得到,方便统计。
我用wireshark抓包,根据抓包过程用Perl写了个脚本,现在是设备登陆成功了,但是执行指令执行不下去。
登陆成功后,程序就卡在登陆上,程序过一会自动退出。

此外,还有两个问题咨询一下:
     1、如何设置接受数据的等待时间,方便接受完数据后再输入下一条指令
     2、如何设置接收数据的缓冲区的大小,接受的数据从wireshark上抓包看到需要2个以上的数据包来承载反馈结果
有哪位高手帮忙指点一下。

wireshark的包文件: wireshark抓包.rar (1.8 KB, 下载次数: 18)

抓包过程如下:
1、登陆设备过程抓包.jpg
  
2、向设备输入一条指令的抓包.jpg

3、退出设备抓包.jpg

4、执行脚本反馈结果.jpg



脚本如下:
use Socket qw(:all);
use strict;

#129.9.96.11:1400
my $address = sockaddr_in(1400,inet_aton('129.9.96.11'));
socket(SOCK, AF_INET, SOCK_STREAM, IPPROTO_TCP) || die $!;
my $result=connect(SOCK, $address) || die $!;
print $result."\n";

##################################################登陆设备过程
    my @aHead =(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x00);
    my $msg_out = join "", map{chr($_)} @aHead;
    $msg_out .= sprintf(':login:"%s","%s"%c%c',"szhw","nesoft",13,10);
    syswrite(SOCK, $msg_out);
#print SOCK hex()';
while(<SOCK>)
{
  print;
}
undef @aHead;
undef $msg_out;
####################################################登陆设备过程
sleep 3;

####################################################向设备输入一条指令过程
    my @aHead =(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x23,
                0x00,0x00,0x00,0x00,0x3a,0x70,0x74,0x6e,0x2d,0x65,0x74,0x79,
                0x2d,0x67,0x65,0x74,0x2d,0x70,0x6f,0x72,0x74,0x63,0x75,0x72,
                0x72,0x61,0x74,0x65,0x3a,0x31,0x2c,0x30,0x78,0x66,0x66,0x2c,0x31,0x0d,0x0a);
    my $msg_out = join "", map{chr($_)} @aHead;
    #print $msg_out."\n";
    syswrite(SOCK,$msg_out);
while(<SOCK>)
{
  print;
}  
undef @aHead;
undef $msg_out;
#################################################向设备输入一条指令过程   
sleep 3;

################################################退出设备过程
    my @aHead =(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x03,0x00,0x09,0x00,0x00,0x00,0x00,0x3a,0x6c,
                0x6f,0x67,0x6f,0x75,0x74,0x0d,0x0a);
    my $msg_out = join "", map{chr($_)} @aHead;
    #print $msg_out."\n";
    syswrite(SOCK,$msg_out);
while(<SOCK>)
{
  print;
}  
undef @aHead;
undef $msg_out;   
################################################退出设备过程
   

close SOCK or die "close: $!";

#问题,1、如何设置接受数据的等待时间,方便接受完数据后再输入下一条指令
#     2、如何设置接收数据的缓冲区的大小,接受的数据从wireshark上抓包看到需要2个以上的数据包来承载反馈结果

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
2 [报告]
发表于 2014-05-30 12:07 |只看该作者
你先试试用telnet登录执行命令是否正常
确认一下是否可以用NET::TENET或者EXPECT来完成你的需求
如果实在要用socket,再来根据telnet的抓包结果看看是否你对协议的理解有遗漏

论坛徽章:
0
3 [报告]
发表于 2014-05-30 13:42 |只看该作者
不能,与设备通信不是用的telnet,我写的脚本里的端口号是1400,不是telnet的23

论坛徽章:
0
4 [报告]
发表于 2014-05-30 13:46 |只看该作者
附件中我已上传wireshark的抓包文件,各位高手们看看有没有遗漏

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
5 [报告]
发表于 2014-05-30 16:09 |只看该作者
telnet ip  1400不行?
telnet的默认端口是23,可是没人说只能telnet 23端口啊
http,smtp,pop3,TL1之类的都可以telnet

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
6 [报告]
发表于 2014-06-02 09:19 |只看该作者
你登陆的是华为的设备吧,用wireshark解析端口1400-> telnet 就能看到内容了
电信设备都是支持标准协议的

论坛徽章:
0
7 [报告]
发表于 2014-06-02 23:34 |只看该作者
用NET::TELNET登录和EXPECT的waitfor等待设备提示符用于等待执行命令结束。
注意如果命令输出数据过多的话,还有more翻页符号的情况要处理。

论坛徽章:
0
8 [报告]
发表于 2014-06-03 09:27 |只看该作者
是华为的设备,端午放假了,今天刚回来上班,待会我试试!

论坛徽章:
0
9 [报告]
发表于 2014-06-03 09:31 |只看该作者
之前我倒是写过用telnet登陆华为的交换机设备,PON设备;但是这种设备好像是不是,华为有自己的登陆工具:navigator;
待会我用SecureCRT改一下端口号看看能不能登录设备。

论坛徽章:
0
10 [报告]
发表于 2014-06-03 09:42 |只看该作者
一般来说用EXPECT就封装其他的应用可以实现命令的交互过程(telnet,ssh等)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP