Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在scapy中返回0,1,2,3的条件代码_Python_Scapy - Fatal编程技术网

Python 在scapy中返回0,1,2,3的条件代码

Python 在scapy中返回0,1,2,3的条件代码,python,scapy,Python,Scapy,我想将我的Scapy代码与Nagios监控工具集成,并希望结果返回0,1,2,3 该程序工作正常,充当被动侦听器来广播流量,并显示IP地址和时间间隔 任何人都可以帮助我的代码,我可以使用返回这些值,请找到下面的代码 很抱歉,我没有包含代码,请在下面查找: import sys import string import datetime import socket from datetime import datetime from scapy.al

我想将我的
Scapy
代码与Nagios监控工具集成,并希望结果返回0,1,2,3

该程序工作正常,充当被动侦听器来广播流量,并显示IP地址和时间间隔

任何人都可以帮助我的代码,我可以使用返回这些值,请找到下面的代码

很抱歉,我没有包含代码,请在下面查找:

    import sys
    import string
    import datetime
    import socket
    from datetime import datetime
    from scapy.all import *
    m_iface = "eth0"
    default_gw = "192.168.26.2"
    COUNTER_SLOTS = 5
    TIMEOUT = 20
    SCREEN_REFRESH = 15
    circular_counter = [0]*COUNTER_SLOTS
    session_start = {}
    session_stop = {}
    host_names = {}
    last_printed = 0

    host_names ["196.168.26.254"]=u'macbook'
    host_names ["192.167.26.237"]=u'testlocal'
    host_names ["192.168.26.238"]=u'xp1'
    host_names ["192.168.26.239"]=u'xp2'
    host_names ["192.168.26.2"]=u'default gateway'


    print "passive ping start"


    def arp_monitor_callback(pkt): 
    if ARP in pkt and pkt[ARP].op in (1,2): #who-has or is-at
    addr = pkt[ARP].psrc
    arp_counter(addr) 
return
    # circular buffer for statistics, 1 slot for 
    if UDP in pkt and IP in pkt:
    ipdata = pkt[IP]
    addr = ipdata.getlayer(IP).src
    arp_counter(addr)
    return

    def arp_counter(src):
    global last_printed
    tm = int(time.time())

    #print (pkt.psrc)
    #all_stats[src] = tm

    pos = src.find("192.168.26")
    if pos == -1:
    # print "wrong address"
    return

    if src in session_stop.keys():
    sess_stop = session_stop[src]
    if (tm - sess_stop)/60 > TIMEOUT:
    session_start[src] = tm   # start a new session
    session_stop[src] = tm   # start a new session
    else:
    session_stop[src] = tm   # start a new session

    else: # never saw the host
    session_start[src] = tm   # start a new session
    session_stop[src] = tm   # start a new session


    # print 
    if (tm - last_printed > SCREEN_REFRESH):
    print "-----------------------------------"
    last_printed = tm
    i = 1
    for k in sorted(session_start.keys(), cmp=lambda x, y: cmp(socket.inet_aton(x),                     socket.inet_aton(y))):
    if k in host_names.keys():
    hn = string.ljust(host_names[k], 40)
    else:
    hn = u'local_host_machine_ip'.ljust(40)

    last_hours = (tm - session_stop[k])/3600
    last_mins = ((tm - session_stop[k])/60) % 60

    s_start = (datetime.fromtimestamp(int(session_start[k])).strftime('%d/%m %H:%M'))
    s_stop = (datetime.fromtimestamp(int(session_stop[k])).strftime('%d/%m %H:%M'))

    pos = k.find("192.168.26")
    if pos != -1:
            print i, k,"\t", hn,"\t",last_hours,":",last_mins,"\t","                (",s_start,"==",s_stop,")",(session_stop[k] - session_start[k])/60
            i = i + 1

    #sys.stdout.flush()


    p = sniff(prn=arp_monitor_callback, store = 0)

基于您提供的有限解释,有两种可能性

Python的
return
语句可用于返回Python对象,或者在本例中返回整数

您必须在函数中使用它。由于您没有发布任何代码,我不确定这是否正是您想要的

您还可以使用
sys
模块在运行完您的Scapy代码后返回退出状态

使用
sys
的示例

import sys
from scapy.all import *

# Scapy magic

sys.exit(0) # exit with a code of 0

请张贴相关代码!请重新发布相关代码。只需从编辑器复制粘贴,然后选择所有代码,然后按工具栏中的
{}
按钮。缩进在Python中很重要。你能修复你的代码缩进吗?这样我们就不会告诉你缩进的错误了。谢谢,但这并没有解决问题。我只希望代码与nagios集成,但需要它在主机可访问时打印出0,在主机不可访问时打印出3。它会监听UDP和ARP广播流量,并打印ip地址和时间间隔。请确保重新上传您的代码,以便我们都能仔细查看。