2013-08-13 1 views
-2

Scapy 코드를 Nagios 모니터링 툴과 통합하고 결과가 0,1,2,3을 반환하기를 원합니다.조건부 코드로 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) 
+0

관련 코드를 게시하시기 바랍니다! – RyPeck

+1

** ** ** ** 관련 코드를 게시하십시오. 편집기에서 붙여 넣기를 복사 한 다음 모든 코드를 선택하고 툴바의 {} 버튼을 누르십시오. –

+2

들여 쓰기는 파이썬에서 중요합니다. 코드 들여 쓰기를 수정하여 들여 쓰기 오류를 알려주지 마십시오. –

답변

1

두 가능성을.

파이썬의 return 문을 사용하여 파이썬 객체 또는이 경우 정수를 반환 할 수 있습니다.

http://docs.python.org/2/reference/simple_stmts.html#return

당신은 함수 내에서 사용해야합니다. 코드를 게시하지 않았으므로 이것이 정확히 원하는 것인지 확실하지 않습니다.

Scapy 코드 실행이 끝나면 sys 모듈을 사용하여 종료 상태를 반환 할 수도 있습니다. 사용

http://docs.python.org/2/library/sys.html#sys.exit

sys -

import sys 
from scapy.all import * 

# Scapy magic 

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

고맙지 만 문제가 해결되지 않았습니다. 난 그냥 코드가 nagios와 통합되기를 원하지만, 호스트가 도달 할 수있을 때 0을 출력하고, 도달 할 수 없을 때 3을 출력 할 필요가있다. UDP 및 ARP 브로드 캐스트 트래픽을 청취하고 시간 간격을 사용하여 IP 주소를 인쇄합니다. – edward

+0

코드를 다시 업로드하여 모두 잘 살펴볼 수 있도록하십시오. – RyPeck

관련 문제