免费注册 查看新帖 |

Chinaunix

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

这代码有什么 问题?socket [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-15 07:07 |只看该作者 |倒序浏览
为什么打印的都是全开放端口?哪里错了吗

  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use IO::Socket::INET;

  5. my $port = 1;
  6. while($port < 100){
  7.         my $socket = IO::Socket::INET->new(
  8.                      PeeAddr => "localhost",
  9.                      PeerPort => $port,
  10.                      Proto         => 'tcp',
  11.                      Timeout        => 1
  12.         );
  13.         if($socket){
  14.                      print "$port Open!\n";
  15.                      close($socket);
  16.         }
  17.         $port++;
  18. }
复制代码



论坛徽章:
0
2 [报告]
发表于 2016-10-17 10:28 |只看该作者
PeeAddr 应该写成PeerAddr 至于为什么写错了返回真,得去看看IO::Socket::INET的代码了.

论坛徽章:
0
3 [报告]
发表于 2016-10-17 12:04 |只看该作者
回复 2# tmp

改回了也不行,,,,,

论坛徽章:
0
4 [报告]
发表于 2016-10-17 18:59 |只看该作者
回复 3# 522468522

  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use IO::Socket::INET;

  5. my $port = 1;
  6. while($port < 100){
  7.          my $socket = IO::Socket::INET->new(
  8.                      PeerAddr => "localhost",
  9.                      PeerPort => $port,
  10.                      Proto         => 'tcp',
  11.                      Timeout        => 1
  12.          );
  13.          if($socket){
  14.                      print "$port Open!\n";
  15.                      close($socket);
  16.          }
  17.          $port++;
  18. }
复制代码

$ perl p.pl
25 Open!
80 Open!
$

论坛徽章:
0
5 [报告]
发表于 2016-10-17 19:39 |只看该作者
回复 4# tmp

谢谢, 那我设置了超时, 为何$socket->recv()接收时还是会等 很久?难道new创建一个socket时, 那个timeout也接收无关?

论坛徽章:
0
6 [报告]
发表于 2016-10-18 13:44 |只看该作者
那个timeout是connect的

论坛徽章:
0
7 [报告]
发表于 2016-10-18 16:03 |只看该作者
回复 6# tmp

那请问接 收超时, 用哪个呢?

论坛徽章:
0
8 [报告]
发表于 2016-10-18 16:14 |只看该作者
回复 7# 522468522

perldoc -f alarm

或者试试IO::Socket::Timeout, 我没用过这个

论坛徽章:
0
9 [报告]
发表于 2016-10-18 17:40 |只看该作者
回复 8# tmp

这个我也查到了, 但我按照它说的来做,

  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use IO::Socket::INET;
  5. use IO::Socket::Timeout;

  6. my $port = 1;
  7. while($port < 100){
  8.          my $socket = IO::Socket::INET->new(
  9.                      PeerAddr => "localhost",
  10.                      PeerPort => $port,
  11.                      Proto         => 'tcp',
  12.                      Timeout        => 1
  13.          );
  14.                  IO::Socket::Timeout->enable_timeouts_on($socket);
  15.                  $socket->read_timeout(1);
  16.          if($socket){
  17.                      print "$port Open!\n";
  18.                                          my $banner = <$socket>;
  19.                                          print $banner, "\n";
  20.                      close($socket);
  21.          }
  22.          $port++;
  23. }
复制代码

返回:
Can't call method "read_timeout" on an undefined value at scan.pl line 17.
说明这个$socket是一个未定义的东西,,,,
我上面不是创好了$socket了吗, 怎么还未定义?
它说意思应是, read_timeout不能用于未定义的$socket吧。
如何解决?

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
10 [报告]
发表于 2016-10-19 10:21 |只看该作者
rrrr
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP