当前位置:  技术问答>linux和unix

cgi程序中用system函数执行iptables命令,在web网页中没法执行

    来源: 互联网  发布时间:2017-02-15

    本文导语:  在Linux下,我编写了一个很简单的c程序,用system函数调用iptables -L命令,编译后在终端能执行成功,但是,编译成.cgi后,再在网页上执行却没反应,不知道是什么原因,希望有懂这方面的好心人指点下,这是我毕设...

在Linux下,我编写了一个很简单的c程序,用system函数调用iptables -L命令,编译后在终端能执行成功,但是,编译成.cgi后,再在网页上执行却没反应,不知道是什么原因,希望有懂这方面的好心人指点下,这是我毕设中出现的问题,现在很着急,希望大家能帮下忙,谢谢!(我用的服务器是boa)
源程序代码为:

     #include     
     #include 
    int main() 
     {
   print("%srnrn","Comtent-Type=text/html");
     system("/sbin/iptables -L");
     
      return 0;
    }
 用gcc编译后在终端运行是没问题的。

|
可以按以下的规则查看sysytem错误:
1,在程序中,用exit来设置进程的退出值时,虽然该函数的参数类型为int型,但再父进程中只能取到其值的低8位.
2,对于system函数,返回值是由两部分组成的,低8位值表示所执行的脚本在执行过程中所接收到的信号值,其余的位表示的脚本exit退出时所设置的值,

即脚本内exit退出是的值的低8位,在system返回值的低9-16位.

system失败的原因很多 除了权限之外,还有可能是 在执行system的时候由于内存不够而导致fork失败,system的实现就是fork+exec。在嵌入式系统中,后面一种情况经常发生。
所以最好是用 perror 看一下system失败的原因。

|
例如:
建一个目录:system("mkdir yourdir")。
(1)首先:要用root用户
如果cgi中要用root用户,则必须在boa.conf文件中配置,将User nobody修改为User root;
这样改之后,将会导致boa无法启动,查看error_log,提示:“boa.c:266.icky Linux kernel bug!:No such file”,解决这个问题,只需将修改boa.c中的以下几行判断去掉即可。
if (setuid(0) != -1) {
    DIE("icky Linux kernel bug!");
}

(2)其次:要用绝对路径
system("/system/bin/mkdir yourdir")。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问cgi能不能运行system或者其他调用shell命令的函数呢?
  • V8引擎的CGI封装 v8cgi
  • 关于CGI的问题
  • cgi+sqlite移植问题,
  • 关于在Linux上开发CGI的问题
  • 关于thttpd和CGI的几个基本问题?
  • 为什么我的CGI程序不能运行?
  • javascript开源软件 iis7站长之家
  • shell &CGI的层次问题
  • CGI程序无法访问本机某个程序创建的共享内存〔求教〕
  • cgi配置问题
  • linux中cgi的配置问题!!
  • 关与cgi程序
  • CGI 编程
  • 请教高手:如果将WIN2000下的CGI论坛迁移到UNIX系统下?
  • Apache上运行CGI
  • Apache 上是否可以制定某目录为cgi目录?
  • 求用c语言完成下载文档的cgi
  • 编译php fast-cgi模式报错
  • 请教cgi程序不能使用popen的问题
  • 有谁做过 thttpd CGI上传下载文件。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3