知识大全 在Shell中打开Server Socket

Posted

篇首语:没有锯不倒的树,没有敲不响的钟。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Shell中打开Server Socket相关的知识,希望对你有一定的参考价值。

在Shell中打开Server Socket  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  工作中的一个需求 需要为一个现存的功能 提供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\\r\\n\\r\\nNOT FOUND\\r\\n ;

  

  

   sub send_page

           my $sock = shift;

           my $ = HTTP/ OK\\r\\nContent Type: text/; charset=UTF \\r\\n\\r\\n

                   <><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></>\\r\\n ;

  

           print $sock $;

  

  

   sub get_url

           my $sock = shift;

           my $line = ;

           while(($line = <$sock>) ne \\r\\n )

          

                   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上可以)

cha138/Article/program/Java/hx/201311/26300

相关参考

知识大全 用shell和java实现自动部署

  公司用到了rackspace的cloudserver做为压力测试的服务器但是一旦启动就开始收费一个小时刀因此要求用的时候打开不用的时候关掉  但是遇到一个问题就是这样的话在上边部署应用程序和软件就

知识大全 sql server还原数据库

  还原数据库  打开SQL企业管理器在控制台根目录中依次点开MicrosoftSQLServer  SQLServer组>双击打开你的服务器>点图标栏的新建数据库图标新建数据库的名字自行

知识大全 一个不错的shell 脚本教程 入门级

建立一个脚本  Linux中有好多中不同的shell但是通常我们使用bash(bourneagainshell)进行shell编程因为bash是免费的并且很容易使用所以在本文中笔者所提供的脚本都是使用

知识大全 oracle中怎样从sql*plus向shell传递变量

很多人在实际的工作和学习中都遇到了无法通过sqlplus向shell传递变量下面我们来介绍一个实例脚本来进行折中处理  >  下面我们再来介绍另一个实例方法  >>>cha138/Artic

知识大全 sql server 2000安装后,打开服务器,不出现服务器名称,自己输入后名称后,启动时显示拒绝访问

sqlserver2000安装后,打开服务器,不出现服务器名称,自己输入后名称后,启动时显示拒绝访问?1>网卡有问题请检查,以太网适配器是否安装正确2>协议有问题请检查,TCP/IP协议,

知识大全 解析php中如何直接执行SHELL

解析php中如何直接执行SHELL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是对php

知识大全 shell grep 查找进程的小技巧

大部分人在写Shell过滤进程的时候都会使用grep在psaux的输出结果中查找指定的进程但此时也会把grep进程也显示出来比如查找pptpd进程会匹配出来两条  复制代码代码如下:  [root@s

知识大全 Java中SOCKET通讯源码

Java中SOCKET通讯源码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //ServeOn

知识大全 利用Delphi编写Socket通信程序

利用Delphi编写Socket通信程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!笔者在工作中

知识大全 Java Socket编程中的一个秘密类

JavaSocket编程中的一个秘密类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一介绍  J