nerves/nerves.py

88 lines
1.9 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Nerves
sniff packets from interface en0 using python module scapy (2.3.1)
generate led color for bhoreal in usb midi mode depending on packet port number
send led number + color to PD patch boreal.pd
in OSC format : /bhoreal/in lednumber ledcolor
color is midi parameter so 0 to 127.
v0.3
By Sam Neurohack
LICENCE : CC
'''
from OSC import OSCClient, OSCMessage
from time import sleep
import types
import random
from scapy.all import *
client = OSCClient()
msg = OSCMessage()
counter = 0
def sendled(zzzport):
global counter
zzz = zzzport % 127
# zzz = led color
msg = OSCMessage()
msg.setAddress("/bhoreal/in")
msg.append(counter)
msg.append(zzz)
try:
client.sendto(msg, ('127.0.0.1', 9002))
msg.clearData()
except:
print 'Connection refused'
pass
sleep(0.001)
counter += 1
if counter > 63:
counter = 0
def print_summary(pkt):
if IP in pkt:
ip_src=pkt[IP].src
ip_dst=pkt[IP].dst
if TCP in pkt:
tcp_sport=pkt[TCP].sport
tcp_dport=pkt[TCP].dport
if tcp_sport < 50000:
print " IP src " + str(ip_src) + " TCP sport " + str(tcp_sport)
sendled(tcp_sport)
if tcp_dport < 50000:
print " IP dst " + str(ip_dst) + " TCP dport " + str(tcp_dport)
sendled(tcp_dport)
if UDP in pkt:
udp_sport=pkt[UDP].sport
udp_dport=pkt[UDP].dport
if udp_sport < 50000:
print " IP src " + str(ip_src) + " UDP sport " + str(udp_sport)
sendled(udp_sport)
if udp_dport < 50000:
print " IP dst " + str(ip_dst) + " UDP dport " + str(udp_dport)
sendled(udp_dport)
if ARP in pkt and pkt[ARP].op in (1,2):
print " ARP"
sendled(67)
def handle_error(self,request,client_address): # All callbacks
pass
sniff(iface='en0', prn=print_summary, store=0)