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)
관련 코드를 게시하시기 바랍니다! – RyPeck
** ** ** ** 관련 코드를 게시하십시오. 편집기에서 붙여 넣기를 복사 한 다음 모든 코드를 선택하고 툴바의 {} 버튼을 누르십시오. –
들여 쓰기는 파이썬에서 중요합니다. 코드 들여 쓰기를 수정하여 들여 쓰기 오류를 알려주지 마십시오. –