From: Svenne Krap <svenne@krap.dk>
Date: Thu, 2 Jun 2011 15:24:54 +0000 (+0200)
Subject: base version
X-Git-Url: http://git.asbjorn.it/?a=commitdiff_plain;h=bd906ec813a7fd2cd8526807bfb691731bdf7b45;p=gs105e.git

base version
---

bd906ec813a7fd2cd8526807bfb691731bdf7b45
diff --git a/gs105e.py b/gs105e.py
new file mode 100644
index 0000000..530fb61
--- /dev/null
+++ b/gs105e.py
@@ -0,0 +1,89 @@
+#!/usr/bin/python
+import socket 
+import time
+import binascii
+import pprint
+import struct
+import random
+
+class gs105e:
+	def __init__(self,host,port):
+		self.myhost = host
+		self.myport = port
+		self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+		self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+		self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+		self.socket.bind((host, port))
+		self.seq = random.randint(100,2000)
+
+	def recv(self,recvfunc,maxlen=8192,timeout=0.005):
+		self.socket.settimeout(timeout)
+		try:
+			message, address = self.socket.recvfrom(maxlen)
+		except socket.timeout:
+			return None
+		self.recvfunc(message,address)
+		self.recv(recvfunc,maxlen,timeout)
+
+	def parse_packet(self,p,hex=0):
+		data = {}
+		data["seq"]= p[22:24]
+		data["cmd"]= p[32:34]
+		data["mymac"]= p[8:14]
+		data["theirmac"]= p[14:20]
+		if hex == 1:
+			for a in data: 
+				data[a]=binascii.hexlify(data[a])
+		return data
+
+	def recvfunc(self,m,a):
+		hexdata = self.parse_packet(m,1)
+		data = self.parse_packet(m)
+
+		if data["seq"] == "\x00\x01":
+			pass
+		print hexdata["theirmac"]
+
+	def send(self,host,port,data):
+		self.socket.sendto(data,(host,port))
+		self.seq+=1
+
+
+	def baseudp(self,cmd,destmac="\x00\x00\x00\x00\x00\x00"):
+		reserved = "\x00"
+		data = 2 * "\x01" + 6* reserved + self.srcmac + destmac + 2*reserved  
+		data += struct.pack(">h",self.seq)
+		data +=  "NSDP" + 4 * reserved + cmd 
+		return data
+
+	def discover(self):
+		self.srcmac = "\x00\x21\x86\x98\xda\x1e"
+
+		reserved = "\x00"
+		cmd = "\x00\x01"
+
+		data = self.baseudp(cmd)
+		data += 3 * "\x00" + "\x02" 
+		data += 3 * "\x00" + "\x03" +  3 * "\x00" + "\x04" + 3* "\x00" + "\x05"
+		data += 3 * "\x00" + "\x06" +  3 * "\x00" + "\x07" + 3* "\x00" + "\x08"
+		data += 3 * "\x00" + "\x0b" +  3 * "\x00" + "\x0c" + 3* "\x00" + "\x0d"
+		data += 3 * "\x00" + "\x0e" +  3 * "\x00" + "\x0f" + 2 * "\x00"
+		data +=  "\x74" + 3 * "\x00" 
+		data += 2* "\xff" + 2* "\x00"
+#		self.send("255.255.255.255",63322, data)
+#		time.sleep(1)
+		self.send("255.255.255.255",63322, data)
+		time.sleep(0.7)
+
+		data = self.baseudp(cmd)
+		data += 3 * "\x00" + "\x02" 
+		data += 3 * "\x00" + "\x03" +  3 * "\x00" + "\x04" + 3* "\x00" + "\x05"
+		data += 3 * "\x00" + "\x06" +  3 * "\x00" + "\x07" + 3* "\x00" + "\x08"
+		data += 3 * "\x00" + "\x0b" +  3 * "\x00" + "\x0c" + 3* "\x00" + "\x0d"
+		data += 3 * "\x00" + "\x0e" +  3 * "\x00" + "\x0f" + 2 * "\x00"
+		data += 2* "\xff" + 2* "\x00"
+	#	self.send("255.255.255.255",63322, data)
+		self.recv(None)
+
+g = gs105e('',63321)
+g.discover()