精华内容
下载资源
问答
  • 目录 strongswan与xfrm之间的trap机制 0. 1. 前言 2. 描述 2.1 none 2.2 trap 3. 实验与过程 3.1 trap实验 3.2 none实验 ...

    strongswan与xfrm之间的trap机制

    0.

    你必须同时知道,strongswan,xfrm,strongswan connect trap三个概念。
    才有继续读下去的意义。
    入门请转到:【TODO...】

    1. 前言

    strongswan的vici配置文件中,child_conn配置项下,有一个配置start_action。里边有三个可选的值。
    分别为start,none,trap。none为默认。
    其中start代表在load好配置之后就up该条conn。
    然后,有关none与trap将做为本文的两个重点讨论场景,通过一下篇幅进行考察。
    欢迎收看,@_@~~

    2. 描述

    基于前文。我们现在来解释一下none与trap的含义。

    2.1 none

    none,代表只加载配置,而不对连接进行任何操作。等于控制程序进行触发conn的up操作。

    2.2 trap

    trap,翻译成中文是陷阱,捕获的意思。就是说一旦它捕获了一个包,就要触发conn的up。
    而捕获这个操作,是通过policy进行的。我们知道,在strongswan的配置信息一旦进行了加载之后,
    它就会下发policy给xfrm,这个捕获动作正是通过这个预下发的policy来完成的。

    3. 实验与过程

    我们分别用none与trap配置做了两个实验。

    3.1 trap实验

    1. 首先通过swanctl --load-all命令,将设置为trap的配置信息下发给strongswan。
    2. 这个时候,storngswan已经预先加载了policy给xfrm,为trap做准备。
      通过命令,我们在内核里可以查看到,类似如下的信息。
    [root@T9 sbin]# ip xfrm po
    src 10.9.0.0/16 dst 10.129.0.0/16 
            dir out priority 383615 ptype main 
            tmpl src 192.168.7.9 dst 192.168.7.129
                    proto esp spi 0xcbbb1290 reqid 1 mode tunnel
    src 10.129.0.0/16 dst 10.9.0.0/16 
            dir fwd priority 383615 ptype main 
            tmpl src 192.168.7.129 dst 192.168.7.9
                    proto esp reqid 1 mode tunnel
    src 10.129.0.0/16 dst 10.9.0.0/16 
            dir in priority 383615 ptype main 
            tmpl src 192.168.7.129 dst 192.168.7.9
                    proto esp reqid 1 mode tunnel
    src 0.0.0.0/0 dst 0.0.0.0/0 
            socket in priority 0 ptype main 
    src 0.0.0.0/0 dst 0.0.0.0/0 
            socket out priority 0 ptype main 
    src 0.0.0.0/0 dst 0.0.0.0/0 
            socket in priority 0 ptype main 
    src 0.0.0.0/0 dst 0.0.0.0/0 
            socket out priority 0 ptype main 
    src ::/0 dst ::/0 
            socket in priority 0 ptype main 
    src ::/0 dst ::/0 
            socket out priority 0 ptype main 
    src ::/0 dst ::/0 
            socket in priority 0 ptype main 
    src ::/0 dst ::/0 
            socket out priority 0 ptype main 
    1. 这个时候,作者在trap strongswan网关后面的子网里发了一个ping包给对方网络。
      可以观察到网络通了,是可以ping通的。然后通过ip xfrm命令也能查看到sa已经在kernel
      里边建立里起来。

    2. 用GBD启动charon进行,并重复上边的实验。
      我们能观察到,在发送第一个ping包之后,有如下现象:
      a。 xfrm发送了一条ACQUIRE event给strongswan。
      b。strongswan发送了一个NEWSA消息给xfrm。
      之后便建立了新的child sa。

    3.2 none实验

    很显然,该实验并没有什么好实验的。我们只观察一件事情,就是在load的config之后。xfrm里边的policy情况。
    如下:

    [root@T9 sbin]# ip xfrm po
    src 0.0.0.0/0 dst 0.0.0.0/0 
            socket in priority 0 ptype main 
    src 0.0.0.0/0 dst 0.0.0.0/0 
            socket out priority 0 ptype main 
    src 0.0.0.0/0 dst 0.0.0.0/0 
            socket in priority 0 ptype main 
    src 0.0.0.0/0 dst 0.0.0.0/0 
            socket out priority 0 ptype main 
    src ::/0 dst ::/0 
            socket in priority 0 ptype main 
    src ::/0 dst ::/0 
            socket out priority 0 ptype main 
    src ::/0 dst ::/0 
            socket in priority 0 ptype main 
    src ::/0 dst ::/0 
            socket out priority 0 ptype main 
    [root@T9 sbin]# 
    

    我们可以看到只有默认policy,而没有任何connection相关的policy。

    4 背景知识

    这里,需要额外补充一条背景知识。
    通过阅读netlink plugin与xfrm接口部分的源码。并没有任何与start_action相关的信息交互。
    主要的数据结构中,也都没有start_action这样一个概念存在。

    注:有关什么是netlink plugin,以及它在strongswan中的作用,以后补充。。。

    5. 机制分析

    通过第四小节中补充的知识,以及第三小节的实验。我们可以推断出。start_action这个事情是strongswan
    在控制层面上的概念。它通过使用预下发不同的policy和xfrm的acquire机制,共同实现了这一概念。

    5.1 什么是acquire

    acquire是xfrm通过API向上推送给应用程序的一种消息,它的类型是ACQUIRE。

    5.2 那么,什么时候发送acquire消息呢

    当xfrm收到一个包的时候,这个包命中了某条policy。这条policy却没有对应的child sa的时候。
    xfrm就会对所有注册进了xfrm netlink的应用程序广播这条消息。然后,你便看到了第三小节里的实验现象。
    strongswan收到这个消息后,主动下发一个新的sa给xfrm。

    6.

    完了。希望你已经懂了。

    展开全文
  • erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到。它的实现需要erl vm的配合。它的作用基本上有3个: <br />1. 把费时操作分阶段做。由于erlang是个软实时系统,一个进程或者bif...

    erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到。它的实现需要erl vm的配合。它的作用基本上有3个:

    1. 把费时操作分阶段做。由于erlang是个软实时系统,一个进程或者bif不能无限制的占用cpu时间。所以erlang的每个进程执行的时候,最多只能执行一定数量的指令.这个是设计方面的目标。实现上也要配套。所以比如md5,list_member查找这种可能耗时的操作都是用trap机制来实现的,也就是说 当进程调度到的时候 执行一定数量的计算 然后把上下文trap起来 放弃执行 等待下一次的调度 来继续计算。

    2. 延迟执行,实现上层的决策。 明显的例子是 send操作。 send的时候 节点间可能未连接,所以这个send的操作不能继续,先trap, 然后在下一次的调度的时候 执行节点连接操作,一旦成功 send操作就继续往下执行。对客户来讲这个操作是透明的。他不知道你幕后的这些事情。

    3. 主动放弃CPU yield.

    erlang设计还是蛮细致的!

    PS:涉及到费时操作的BIF有:
    do_bif_utf8_to_list
    ets_delete_1
    spawn_3
    monitor_2
    spawn_link_3
    spawn_opt_1
    send_2
    crc32_1
    adler32_1
    md5_1
    send_3
    build_utf8_return
    build_list_return
    finalize_list_to_list
    do_bif_utf8_to_list
    ets_select_reverse
    ets_match_spec_run_r_3
    re_run_3
    re_exec_trap
    keyfind
    monitor_node_3.

    展开全文
  • erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到。它的实现需要erl vm的配合。它的作用基本上有3个: 1. 把费时操作分阶段做。由于erlang是个软实时系统,一个进程或者bif不能无限制的占用...

    erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到。它的实现需要erl vm的配合。它的作用基本上有3个:

    1. 把费时操作分阶段做。由于erlang是个软实时系统,一个进程或者bif不能无限制的占用cpu时间。所以erlang的每个进程执行的时候,最多只能执行一定数量的指令.这个是设计方面的目标。实现上也要配套。所以比如md5,list_member查找这种可能耗时的操作都是用trap机制来实现的,也就是说 当进程调度到的时候 执行一定数量的计算 然后把上下文trap起来 放弃执行 等待下一次的调度 来继续计算。

    2. 延迟执行,实现上层的决策。 明显的例子是 send操作。 send的时候 节点间可能未连接,所以这个send的操作不能继续,先trap, 然后在下一次的调度的时候 执行节点连接操作,一旦成功 send操作就继续往下执行。对客户来讲这个操作是透明的。他不知道你幕后的这些事情。

    3. 主动放弃CPU yield.

    erlang设计还是蛮细致的!

    PS:涉及到费时操作的BIF有:
    do_bif_utf8_to_list
    ets_delete_1
    spawn_3
    monitor_2
    spawn_link_3
    spawn_opt_1
    send_2
    crc32_1
    adler32_1
    md5_1
    send_3
    build_utf8_return
    build_list_return
    finalize_list_to_list
    do_bif_utf8_to_list
    ets_select_reverse
    ets_match_spec_run_r_3
    re_run_3
    re_exec_trap
    keyfind
    monitor_node_3.

    展开全文
  • SNMP协议是在服务器以及硬件管理中通常都会用到的管理协议,其好处在于使用起来简单,...SNMP TRAP是SNMP协议里面通常使用的通道(其他还有GET,SET),TRAP通常是使用UDP,且协议层没有消息确认机制的,所以如果你使

     SNMP协议是在服务器以及硬件管理中通常都会用到的管理协议,其好处在于使用起来简单,然后又是标准化的,几乎所有的硬件设备都支持此协议。不过近期网络安全问题大家都比较关注,SNMP也饱受争议。
    今天我们要讨论是是如何使用SNMP Trap发送同步消息。

    SNMP TRAP是SNMP协议里面通常使用的通道(其他还有GET,SET),TRAP通常是使用UDP,且协议层没有消息确认机制的,所以如果你使用SNMP TRAP给服务器上报消息,那么你是不知道消息是否发送成功以否的。
    最简答的SNMP例子可以参考《http://www.iteye.com/topic/308836》,这个是使用Java语言基于SNMP4J的例子。

    你运行这个例子之后,你会发现,下面这个if,总是为false,也就是返回的respond总是null。
    // 向Agent发送PDU,并接收Response
    ResponseEvent respEvnt = snmp.send(pdu, target);

    // 解析Response
    if (respEvnt != null && respEvnt.getResponse() != null) {

    这个就是刚才说到的SNMP TRAP的特性:无确认机制。
    那么对于一些重要的信息,希望得到这些消息是否发送成功了,该怎么办?

    我的建议是,如果是新开发的,那么建议这种场景不要使用SNMP,如果对端协议已经是SNMP了,那么建议将SNMP TRAP改为SNMP INFORM,这个改动是很小的。
    只需要在行面的例子中,在TRAP接受端,增加如下代码即可:(不过INFORM的特性,需要SNMP协议的 V2 以及之后的版本才支持,SNMP V1是不支持的)。
    //send respond only if the pdu type is INFORM
    PDU src_pdu = respEvnt.getPDU();
    if (src_pdu.getType() == PDU.INFORM){
    PDU responsePDU = new PDU(src_pdu);
    responsePDU.setErrorIndex(0);
    responsePDU.setErrorStatus(0);
    responsePDU.setType(PDU.RESPONSE);
    StatusInformation statusInfo = new StatusInformation();
    StateReference stateRef = respEvnt.getStateReference();
    try {
    respEvnt.getMessageDispatcher().returnResponsePdu(
    respEvnt.getMessageProcessingModel(),
    respEvnt.getSecurityModel(),
    respEvnt.getSecurityName(),
    respEvnt.getSecurityLevel(),
    responsePDU,
    respEvnt.getMaxSizeResponsePDU(),
    stateRef,
    statusInfo);

    } catch (MessageException msgEx) {
    msgEx.printStackTrace();
    }
    }

    你更改了协议之后,还会遇到向前兼容的问题,假设发送端为S,接收端为R,那么S使用TRAP发送,不论R是否发送respond,S端都收不到respond;如果S使用INFORM发送,那么如果R发送respond,S能够收到,如果R不发送respond,那么S收不到。

    完整的代码如下:

    MultiThreadedTrapReceiver
    import java.io.IOException;
    import java.net.UnknownHostException;
    import java.util.Vector;

    import org.snmp4j.CommandResponder;
    import org.snmp4j.CommandResponderEvent;
    import org.snmp4j.MessageDispatcherImpl;
    import org.snmp4j.MessageException;
    import org.snmp4j.PDU;
    import org.snmp4j.Snmp;
    import org.snmp4j.TransportMapping;
    import org.snmp4j.mp.MPv1;
    import org.snmp4j.mp.MPv2c;
    import org.snmp4j.mp.MPv3;
    import org.snmp4j.mp.StateReference;
    import org.snmp4j.mp.StatusInformation;
    import org.snmp4j.security.SecurityModels;
    import org.snmp4j.security.SecurityProtocols;
    import org.snmp4j.security.USM;
    import org.snmp4j.smi.Address;
    import org.snmp4j.smi.GenericAddress;
    import org.snmp4j.smi.OctetString;
    import org.snmp4j.smi.TcpAddress;
    import org.snmp4j.smi.UdpAddress;
    import org.snmp4j.smi.VariableBinding;
    import org.snmp4j.transport.DefaultTcpTransportMapping;
    import org.snmp4j.transport.DefaultUdpTransportMapping;
    import org.snmp4j.util.MultiThreadedMessageDispatcher;
    import org.snmp4j.util.ThreadPool;

    /**
    * 本类用于监听代理进程的Trap信息
    *
    * @author zhanjia
    *
    */
    public class MultiThreadedTrapReceiver implements CommandResponder {

    private MultiThreadedMessageDispatcher dispatcher;
    private Snmp snmp = null;
    private Address listenAddress;
    private ThreadPool threadPool;

    public MultiThreadedTrapReceiver() {
    // BasicConfigurator.configure();
    }

    private void init() throws UnknownHostException, IOException {
    threadPool = ThreadPool.create(“Trap”, 2);
    dispatcher = new MultiThreadedMessageDispatcher(threadPool,
    new MessageDispatcherImpl());
    listenAddress = GenericAddress.parse(System.getProperty(
    “snmp4j.listenAddress”, “udp:127.0.0.1/9999″)); // 本地IP与监听端口
    TransportMapping transport;
    // 对TCP与UDP协议进行处理
    if (listenAddress instanceof UdpAddress) {
    transport = new DefaultUdpTransportMapping(
    (UdpAddress) listenAddress);
    } else {
    transport = new DefaultTcpTransportMapping(
    (TcpAddress) listenAddress);
    }
    snmp = new Snmp(dispatcher, transport);
    snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());
    snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
    snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3());
    USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3
    .createLocalEngineID()), 0);
    SecurityModels.getInstance().addSecurityModel(usm);
    snmp.listen();
    }


    public void run() {
    try {
    init();
    snmp.addCommandResponder(this);
    System.out.println(“开始监听Trap信息!”);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }

    /**
    * 实现CommandResponder的processPdu方法, 用于处理传入的请求、PDU等信息
    * 当接收到trap时,会自动进入这个方法
    *
    * @param respEvnt
    */
    public void processPdu(CommandResponderEvent respEvnt) {
    //send respond pdu
    if (respEvnt != null && respEvnt.getPDU() != null) {
    //send respond only if the pdu type is INFORM
    PDU src_pdu = respEvnt.getPDU();
    if (src_pdu.getType() == PDU.INFORM){
    PDU responsePDU = new PDU(src_pdu);
    responsePDU.setErrorIndex(0);
    responsePDU.setErrorStatus(0);
    responsePDU.setType(PDU.RESPONSE);
    StatusInformation statusInfo = new StatusInformation();
    StateReference stateRef = respEvnt.getStateReference();
    try {
    respEvnt.getMessageDispatcher().returnResponsePdu(
    respEvnt.getMessageProcessingModel(),
    respEvnt.getSecurityModel(),
    respEvnt.getSecurityName(),
    respEvnt.getSecurityLevel(),
    responsePDU,
    respEvnt.getMaxSizeResponsePDU(),
    stateRef,
    statusInfo);

    } catch (MessageException msgEx) {
    msgEx.printStackTrace();
    }
    }

    //retrive the pdu
    Vector<VariableBinding> recVBs = respEvnt.getPDU().getVariableBindings();
    for (int i = 0; i < recVBs.size(); i++) {
    VariableBinding recVB = recVBs.elementAt(i);
    System.out.println(recVB.getOid() + ” : “ + recVB.getVariable());
    }
    }
    }

    public static void main(String[] args) {
    MultiThreadedTrapReceiver multithreadedtrapreceiver = new MultiThreadedTrapReceiver();
    multithreadedtrapreceiver.run();
    }

    }

    SnmpUtilSendTrap
    import java.io.IOException;
    import java.util.Vector;

    import org.snmp4j.CommunityTarget;
    import org.snmp4j.PDU;
    import org.snmp4j.Snmp;
    import org.snmp4j.TransportMapping;
    import org.snmp4j.event.ResponseEvent;
    import org.snmp4j.mp.SnmpConstants;
    import org.snmp4j.smi.Address;
    import org.snmp4j.smi.GenericAddress;
    import org.snmp4j.smi.OID;
    import org.snmp4j.smi.OctetString;
    import org.snmp4j.smi.VariableBinding;
    import org.snmp4j.transport.DefaultUdpTransportMapping;

    /**
    * 本类用于向管理进程发送Trap信息
    *
    * @author zhanjia
    *
    */
    public class SnmpUtilSendTrap {

    private Snmp snmp = null;

    private Address targetAddress = null;

    public void initComm() throws IOException {

    // 设置管理进程的IP和端口
    targetAddress = GenericAddress.parse(“udp:127.0.0.1/9999″);
    TransportMapping transport = new DefaultUdpTransportMapping();


    snmp = new Snmp(transport);
    transport.listen();

    }

    /**
    * 向管理进程发送Trap报文
    *
    * @throws IOException
    */
    public void sendPDU() throws IOException {

    // 设置 target
    CommunityTarget target = new CommunityTarget();
    target.setAddress(targetAddress);

    // 通信不成功时的重试次数
    target.setRetries(2);
    // 超时时间
    target.setTimeout(1500);
    // snmp版本
    target.setVersion(SnmpConstants.version2c);

    // 创建 PDU
    PDU pdu = new PDU();
    pdu.add(new VariableBinding(new OID(“.1.3.6.1.2.3377.10.1.1.1.1″),
    new OctetString(“SnmpTrap”)));
    pdu.add(new VariableBinding(new OID(“.1.3.6.1.2.3377.10.1.1.1.2″),
    new OctetString(“JavaEE”)));
    pdu.setType(PDU.INFORM);

    // 向Agent发送PDU,并接收Response
    ResponseEvent respEvnt = snmp.send(pdu, target);

    // 解析Response
    if (respEvnt != null && respEvnt.getResponse() != null) {
    Vector<VariableBinding> recVBs = respEvnt.getResponse()
    .getVariableBindings();
    for (int i = 0; i < recVBs.size(); i++) {
    VariableBinding recVB = recVBs.elementAt(i);
    System.out.println(“received respond pdu from server. “ + recVB.getOid() + ” : “ + recVB.getVariable());
    }
    }
    }

    public static void main(String[] args) {
    try {
    SnmpUtilSendTrap util = new SnmpUtilSendTrap();
    util.initComm();
    util.sendPDU();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    }



    展开全文
  • 本文介绍了在英飞凌Tricore内核...这篇文章主要讲用Trap机制来调用上下文切换函数(OSCtxSw()),以及系统时钟的实现等内容。 1. Tricore的Trap机制 Trap简单来说,就是在发生一些异常情况或错误操作的时候,系统自动进
  • 9.1.2 Trap 机制 服务程序集合:由操作系统提供的一些子程序(最多256个) 起始地址表: 包含256个服务程序的起始地址。该表位于内存地址x0000~x00FF。 TRAP指令(操作系统以用户程序执行某个特定的服务程序) 链接...
  • Trap gate) 其类型码为111,与中断门类似,其唯一的区别是,控制权通过 陷阱门 进入处理程序时维持IF标志位不变,也就是说,不关中断。 · 系统门(System gate) 这是Linux内核特别设置的,用来让...
  • 浅谈Linux中开发SNMP TrapSNMPTrap是一种标准的报告机制,广泛应用在各种网络管理软件中。本文详细介绍了SNMP Trap的基本概念,以及Linux下面net-snmp对SNMP Trap的开发与应用。1.SNMP Trap简介SNMP简单网络管理协议...
  • trap 端口号

    2018-01-18 11:33:00
    SNMPtrap使用的端口号为:162。 SNMP trap是由被管理的设备主动的向管理服务器发送设备的异常情况消息,可以看成是管理...用一句话来说的话,SNMPTrap就是被管理设备主动发送消息给NMS的一种机制。(此话最概况、...
  • 浅谈Linux中开发SNMPTrapSNMPTrap是一种标准的报告机制,广泛应用在各种网络管理软件中。本文详细介绍了SNMPTrap的基本概念,以及Linux下面net-snmp对SNMPTrap的开发与应用。1.SNMPTrap简介SNMP简单网络管理协议...
  • snmp trap配置

    万次阅读 2016-12-23 12:03:11
    TRAP是提供从代理进程到管理站的异步报告机制。 为了使管理站能够及时而又有效地对被管理设备进行监控,同时又不过分增加网络的通信负载,必须使用陷入(TRAP)制导的轮讯过程。代理进程负责在必要时 向管理站报告...
  • Snmptrap的配置与使用一、trap的用途TRAP是提供从代理进程到管理站的异步报告机制。为了使管理站能够及时而又有效地对被管理设备进行监控,同时又不过分增加网络的通信负载,必须使用陷入(TRAP)制导的轮讯过程。代理...
  • Snmp trap的配置与使用trap的用途TRAP是提供从代理进程到管理站的异步报告机制为了使管理站能够及时而又有效地对被管理设备进行监控,同时又不过分增加网络的通信负载,必须使用陷入(TRAP)制导的轮讯过程。...
  • SNMP-Trap之学习路线

    2017-11-21 13:59:00
    SNMP Trap 原理机制 生产案例 []() 浅谈 Linux 系统中的 SNMP Trap Zabbix的SNMPTrap监控配置 1.监控对象发送SNMPTrap信息到snmptrapd(Net-SNMP)服务器, 2.snmptrapd服务器将接收到的SNMPTrap信息发送给SNMPTT...
  • trap陷阱触发

    2012-02-21 16:20:47
    通常会对信号安排执行特定的命令,后者想避免意外的状况干扰脚本的运行,这种能扑捉特定信息,并作出反应的机制,称为trap陷阱触发 trap的运用和系统的信号有关 信号 进程编号PID unix-like系统,...
  • erlang进程trap_exit捕获异常退出

    千次阅读 2014-11-16 15:56:53
    Erlang除了提供try catch,catch等语法,还支持link和monitor两种监控进程的机制,使得所有进程可以连接起来,组成一个整体。除了这样,erlang还提供trap_exit方法让进程主动捕获异常退出消息,避免发生异常时被系统...
  • net-snmp 安装与trap调试

    千次阅读 2018-03-07 17:41:04
    1、实验环境 windows(7) ... 了解snmp-trap的接受与解析,实验当相关trap发生时,对应的服务器立即响应 TRAP是提供从代理进程到管理站的异步报告机制 snmp(简单网络管理协议)为了使服务端及时...
  • 什么是Trap消息?

    千次阅读 2014-12-05 11:16:05
    用一句话来说的话,SNMP Trap就是被管理设备主动发送消息给NMS的一种机制。  当被管理设备出现性能问题,甚至是网络设备接口宕掉问题时,Agent需要主动发送消息通知NMS。假如在特定事件出现时,不是由Agent 主动...
  • shell中trap捕获信号

    2016-02-27 18:42:33
    shell中trap捕获信号 信号是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令(即信号)。应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉。...
  • 信号捕获trap及其实例应用1、Linux支持的信号(标红部分为常用信号)信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相应的处理函数。进程可以忽略信号、捕捉信号和执行缺省...
  • net-snmp学习笔记- trap

    千次阅读 2013-07-12 13:53:49
    TRAP是提供从代理进程到管理站的异步报告机制。 为了使管理站能够及时而又有效地对被管理设备进行监控,同时又不过分增加网络的通信负载,必须使用陷入(TRAP)制导的轮讯过程。代理进程负责在必要时 向管理站...
  •  ●陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位置。在Windows中,处理器将控制权转交到一个trap handler(一个针对特定中断或异常的函数...
  • 在script的执行过程中,有时候希望能实时处理系统传来的信号,如用户按了Ctrl-C。...像这种能谱捉特定信息,并做出反应的机制称为trap(陷阱触发)。trap的应用和信号有关。 一、信号 1、进程编号PID...
  • snmp学习笔记——配置使用trap

    千次阅读 2010-03-19 14:36:00
    本文是笔者学习net-snmp开发包时的心得,由于那个官方网站的东西比较乱,所以写一个总结,希望后来者少走些弯路 一,trap的用途TRAP是提供从代理进程到管理站的异步报告机制。为了使管理站能够及时而又有效地对被...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 181
精华内容 72
关键字:

trap机制