利用enum来匹配命令

假设我们的tcp命令 定义如下:SayHello() SayWorld()

我们在接收到这些信息后,可以用enum来区分不同的命令。

方法是利用正则表达式,循环和枚举类型去比对。

CommandToken

public enum CommandToken {
    SayHello(1, makePattern("SayHello"), "说hello"),
    SayWorld(2, makePattern("SayWorld"), "说world");
    private int value;           //命令值
    private Pattern pattern;     //匹配模式
    private String description;  //命令描述
    private CommandToken(int value, Pattern pattern, String descripton) {
        this.value = value;
        this.pattern = pattern;
        this.description = descripton;
    }
    public int getValue() {
        return value;
    }
    public Pattern getPattern() {
        return pattern;
    }
    public String getDescription() {
        return description;
    }
    /**
     * 解析命令类型
     * @param value
     * @return
     */
    public static CommandToken parse(String value) throws Exception{
        CommandToken[] vs = values();
        for (CommandToken s : vs) {
            if (s.pattern.matcher(value).matches()) {
                return s;
            }
        }
        if (value.length() > 200) {
            value = value.substring(0, 200) + "...";
        }
        throw new Exception("未知命令:" + value);
    }
    /**
     * 生成Pattern
     * @param key
     * @return
     */
    private static Pattern makePattern(String key) {
        return Pattern.compile("\\b" + key + "\\s*\\([^\\)]*\\)");
    }

    @Override
    public String toString() {
        return description;
    }
}
调用方式

  @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        final String msg = ((String) message).trim();
        if(msg.length() <= 500) {
            logger.debug("Receive TCP << " + msg);
        }
        else {
            logger.debug("Receive TCP << " + msg.substring(0, 500) + "...");
        }
        CommandToken token = null;
        try {
            //解析设备发来的命令
            token = CommandToken.parse(msg);
        }
        catch (Exception e) {
            logger.error(e.getMessage());
            session.closeNow();
            return;
        }
        String out = null;
        switch(token) {
            case SayHello:
                out = "Hello";
                break;
            case SayWorld:
                out = "World";
                break;
        }
        if(out == null) {
            session.closeNow(); //关闭连接
        }
        else {
            session.write(out);
            logger.debug("Send TCP >> " + out);
        }
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
enum4linux命令是一个在Kali Linux终端中使用的工具,用于枚举Windows和Samba服务中的信息。它可以通过LDAP 389 / TCP获取一些有限的信息(仅适用于DN),通过RID循环枚举用户,获取操作系统信息和进行一次大范围信息探测等。以下是一些enum4linux命令的用法: 1. 查看enum4linux的基本使用教程:打开Kali的终端,输入命令enum4linux -h 。 2. 获取有限的信息(适用于DN):使用命令enum4linux -l ip 。 3. 获取操作系统信息:使用命令enum4linux -o ip 。 4. 通过RID循环枚举用户:使用命令enum4linux -r ip 。 5. 进行一次大范围信息探测:使用命令enum4linux -a -o ip 。 这些命令可以帮助安全专业人员在渗透测试和漏洞评估中获取有关目标系统的信息,并帮助他们分析和评估系统的安全性。请注意,这些命令应该在合法授权和合规框架下使用,以确保不会侵犯他人的隐私或系统安全。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【网安神器篇】——enum4linux枚举工具](https://blog.csdn.net/qq_63844103/article/details/127219997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值