判断iptables是否运行的一些探索

现在有这么一个需求,要判断iptables是否开启。咋看比较难以入手,那么可以想,怎么启动iptables,redhat下很容易联想到/etc/init.d/iptabes start 。

我们可以来看一下启动脚本:

start() {
    # Do not start if there is no config file.
    [ ! -f "$IPTABLES_DATA" ] && return 6

    # check if ipv6 module load is deactivated
    if [ "${_IPV}" = "ipv6" ] \
    && grep -qIsE "^install[[:space:]]+${_IPV}[[:space:]]+/bin/(true|false)" /etc/modprobe.conf /etc/modprobe.d/* ; then
    echo $"${IPTABLES}: ${_IPV} is disabled."
    return 150
    fi

    echo -n $"${IPTABLES}: Applying firewall rules: "

    OPT=
    [ "x$IPTABLES_SAVE_COUNTER" = "xyes" ] && OPT="-c"

    $IPTABLES-restore $OPT $IPTABLES_DATA
    if [ $? -eq 0 ]; then
    success; echo
    else
    failure; echo;
    if [ -f "$IPTABLES_FALLBACK_DATA" ]; then
        echo -n $"${IPTABLES}: Applying firewall fallback rules: "
        $IPTABLES-restore $OPT $IPTABLES_FALLBACK_DATA
        if [ $? -eq 0 ]; then
        success; echo
        else
        failure; echo; return 1
        fi
    else
        return 1
    fi
    fi
   
    # Load additional modules (helpers)
    if [ -n "$IPTABLES_MODULES" ]; then
    echo -n $"${IPTABLES}: Loading additional modules: "
    ret=0
    for mod in $IPTABLES_MODULES; do
        echo -n "$mod "
        modprobe $mod > /dev/null 2>&1
        let ret+=$?;
    done
    [ $ret -eq 0 ] && success || failure
    echo
    fi
   
    # Load sysctl settings
    load_sysctl

    touch $VAR_SUBSYS_IPTABLES
    return $ret
}

这个函数其实核心点就是iptables-restore  ,没有后台启动一个daemon程序那种, 因为iptables 是linux 的一个内核模块。这样就比较难判断了,因为不能用所谓的ps查进程的方式,当然末尾有个lock文件可以判断,但如果不是用启动脚本启动的,直接iptables-restore,则不会产生这个lock文件。

至此,陷入一个难题中。

时间: 2024-11-06 20:06:43

判断iptables是否运行的一些探索的相关文章

Android判断Service是否运行

/** * @brief 判断服务是否运行中 * @param servClsName 服务类名 * @return 是否运行中 */ public static boolean isServiceRunning(Context context, String servClsName) { ActivityManager mActivityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE)

判断程序是否运行在管理员权限下

1.提出两个概念(成立条件是系统是Vista后续版本,这是因为引入了UAC) 一个是运行程序的账号是管理员账号 另一个是当前运行环境是管理员环境 2.判断程序是否运行在管理员权限,直接使用函数IsUserAnAdmin就可以判断 #include <ShlObj.h> #include <tchar.h> int _tmain() { BOOL bIsAdmin = IsUserAnAdmin(); if(bIsAdmin) _tprintf_s(_T("Run As a

linux中 shell编程 判断服务是否运行

判断nginx是否运行中: if ps -ef|grep "nginx"|egrep -v grep >/dev/null then echo ok! else echo no! fi 原文地址:https://www.cnblogs.com/DragonStart/p/8184947.html

Android 6.0+ 运行时权限探索

原创文章,转载请注明 ( 来自:http://blog.csdn.net/leejizhou/article/details/51511630 李济洲的博客 ) 引言:去年Android 6.0发布后,其新引入的(Requesting Permissions at Run Time)运行时权限就备受开发者关注,随着今年国内手机厂商对6.0系统的普及,觉得大家有必要了解下这个新特性,因为在TargetSDK23+进行开发不注意这些会造成APP运行在6.0+手机上崩溃,这篇博文将对这个新特性进行探索

[转]判断程序是否运行在 Windows x64 系统下

以下功能代码判断是否运行在 Windows x64 下.本例使用 Windows API 函数 IsWow64Process,具体请参考MSDN文档:http://msdn.microsoft.com/en-us/library/ms684139(VS.85).aspx /** *   This program test if this application is a x64 program or *   is a x86 program running under Windows x64.

判断app是否运行于前台的两个方法

经常遇到这种情况,app收到新消息,如果app不在前台,则在手机通知栏发送一个通知提醒.那么,如何判断app是否处于前台 检验当前app是否运行于前台,而没有被最小化,上网查了一下解决方案,看到一段代码是可以实现的: public boolean isRunningForeground(Context context){ ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE

Python 打包程序判断是否已经运行

代码如下: 1 # -*- coding: UTF8 -*- 2 from win32com.client import Dispatch 3 import win32com 4 import sys, os 5 from PyQt4 import QtCore, QtGui 6 7 class Logicpy(QtGui.QWidget): 8 def __init__(self): 9 super(Logicpy, self).__init__() 10 self.resize(100, 1

随笔——判断Unity3D的运行平台

今天研究了一下Unity3D的运行平台,在这里做个笔记,免得以后又忘了! 1.新建项目 2.新建Scripts和Scenes文件夹,用来存放脚本和场景 3.添加Text,显示输出信息 4.新建GameController脚本 5.运行游戏,查看结果 6.其他 开始吧! 1.新建项目 新建一个项目,名字叫DeltaTimeTest吧,因为我今天顺便要测试一下DeltaTime函数.完成后的界面见下图: 2.新建Scripts和Scenes文件夹,用来存放脚本和场景 到项目浏览器窗口新建Script

判断php的运行模式

我们一般情况下,都是在apache下面运行我们的php程序,当然也有些人是用IIS环境的 我们要是想知道我们目前运行的环境是什么的话,那我们可以用函数php_sapi_name()来测试 代码: <?php echo php_sapi_name(); ?> 在apache环境下面输出的结果是"apache2handler": 在cgi模式下输出的结果是"cgi-fcgi" 原文地址:https://www.cnblogs.com/lxwphp/p/956