免费注册 查看新帖 |

Chinaunix

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

perl写cgi如何获得并且输出系统信息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-13 09:54 |只看该作者 |倒序浏览
我想获取系统的ip地址这样的信息显示在网页里面,我写了下面的代码
系统是blfs 6.3,web服务器是lighttpd,开启了cgi支持,使用的root运行的web server,现在下面的cgi能运行,gmtime()的结果能正常显示,刷新也能改变,问题是@info不能显示,但是在控制台./index.pl这样运行可以正常显示,我知道肯定是我什么地方错了,查了好长时间的google,也没能得出个答案

谢谢大家帮我看看,多谢

#!/usr/bin/perl
use strict;
use warnings;
my @info = `ip add show`;
my $time = gmtime();
print   "Content-type:   text/html\n\n";
print <<end;
<html>
<head>
<title>测试界面</title>
<link rev="made" href="mailto:lcnja\@qq.com" />
<meta name="keywords" content="lcnja" />
<meta name="copyright" content="copyright 2008 Lcnja" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
@info
$time
</body>
</html>
end

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-12-13 10:02 |只看该作者
那就顺带显示一下 $!

论坛徽章:
0
3 [报告]
发表于 2008-12-13 10:23 |只看该作者
先谢谢flw的回复
我再详细的说一下在linux下运行和在网页里面显示的时候的输出

cli直接用root运行这个脚本,回显如下
Content-type:   text/html

<html>
<head>
<title>test it</title>
<link rev="made" href="mailto:lcnja@qq.com" />
<meta name="keywords" content="lcnja" />
<meta name="copyright" content="copyright 2008 Lcnja" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8 scope host lo
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN
     link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
     link/ether 00:0c:29:15:9f:20 brd ff:ff:ff:ff:ff:ff
     inet 192.168.3.248/24 brd 192.168.3.255 scope global eth0
4: teql0: <NOARP> mtu 1500 qdisc noop state DOWN qlen 100
     link/void
5: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN
     link/ipip 0.0.0.0 brd 0.0.0.0
6: gre0: <NOARP> mtu 1476 qdisc noop state DOWN
     link/gre 0.0.0.0 brd 0.0.0.0

Sat Dec 13 02:21:12 2008
</body>
</html>




网页只显示如下

<html>
<head>
<title>test it</title>
<link rev="made" href="mailto:lcnja@qq.com" />
<meta name="keywords" content="lcnja" />
<meta name="copyright" content="copyright 2008 Lcnja" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

Sat Dec 13 02:22:22 2008
</body>
</html>

[ 本帖最后由 情灭缘尽 于 2008-12-13 10:26 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-12-13 10:36 |只看该作者
改了一下,现在在网页访问的时候连时间也不显示了,看来用cgi的时候@info赋值好像没成功,继续google想办法

#!/usr/bin/perl
use strict;
use warnings;
my @info = `ip add show`and my $time = gmtime();
print   "Content-type:   text/html\n\n";
print <<end;
<html>
<head>
<title>测试界面</title>
<link rev="made" href="mailto:lcnja\@qq.com" />
<meta name="keywords" content="lcnja" />
<meta name="copyright" content="copyright 2008 Lcnja" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
@info
$time
</body>
</html>
end

论坛徽章:
0
5 [报告]
发表于 2008-12-13 14:09 |只看该作者
你的cgi 权限可能不够  不能执行  `ip add show`;

试试 chomd 777 *.cgi

论坛徽章:
0
6 [报告]
发表于 2008-12-13 15:35 |只看该作者
问题搞定了
方法如下,为了安全,首先设置lighttpd的运行用户和组为www
然后添加www组和www用户,www用户的shell指定为false
设置sudoers
www     ALL=(ALL) NOPASSWD: /sbin/ip
然后代码改一行
my @info = `/sbin/ip add show`;

然后就可以输出了

感谢所有回我帖子的朋友,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP