检查是否从网络应用程序内部进行DOS或猛击



假设我有一个Web应用程序,具有某种系统执行功能。我将在这个例子中使用 Ruby。此应用程序可以是便携式的,并安装在Windows或Unix服务器上。如果应用程序使用系统命令,有没有办法区分服务器是什么平台,然后也许在if语句中捕获?

理论上是这样的:

os_check = `checkos` # System ticks to execute through the shell
                     # using fake command
if os_check == 'unix'
  # Run Unix Commands
  `ls -la`
else if os_check == 'dos'
  # Run DOS commands
  `dir`
else
  puts 'OS not detectable'
end

编辑

我不是在专门寻找 Ruby(删除了标签)。这是一个例子。我希望有一个可以在两种环境中执行并根据操作系统而可变的 shell 命令。实际上,我必须在多种语言中复制这种功能。很抱歉有任何困惑。

尝试检查RUBY_PLATFORM全局常量:

case RUBY_PLATFORM
  when /win32/ then # Windows, use "dir"
  # when /darwin/ then # Mac OS X
  # when /linux/ then # Linux
  else # Assume "ls" on all other platforms
end

[编辑] 根据更新的问题,您也许能够发出系统命令echo /?并解析输出以确定主机操作系统。 "echo"命令应该存在于大多数系统上,但Windows将/?开关解释为"帮助"消息,而UNIX操作系统只是回显这些字符。 例如(同样在 Ruby 中,只是为了演示一般策略):

def detect_host_operating_system
  (%x{echo /?} =~ /^/?r?n$/) ? 'unix' : 'windows'
end

保持简单。尝试运行仅存在于所需平台上的命令

做事:cmd

尼克斯:man

一些没有参数的三元运行的结果状态是这里的关键。

使用此方法时,没有字符串解析。哪个更优化。

你可以尝试用Python来做,这种脚本语言默认安装在大多数Linux发行版和Mac上(我认为也在像BSD这样的Unix系统上,但我不完全确定)。

import os
if (os.name == "posix"):
    #run unix command
else:
    #run Windows command

当然,如果您愿意,也可以添加更多操作系统检查。

最新更新