Fixed net errors, optimizations and sniffer WIP

Quick fix for package versions compare logic:
 - repo update is OK when candidate is the same
 - repo update is not ok when all versions different

Change-Id: I6602d5486b98375b254d0d92a6071fb26582b770
Related-PROD: PROD-28199
diff --git a/scripts/sniffer.py b/scripts/sniffer.py
index de18eb2..612ff20 100644
--- a/scripts/sniffer.py
+++ b/scripts/sniffer.py
@@ -1,4 +1,134 @@
-# This will be the basic sniffer script
-# Its purpose is to sniff for a specific packet and return its headers-n-data
+import binascii
+import socket
+import struct
 
-pass
+
+class unpack:
+    def __init__(self):
+        self.data = None
+
+    # Ethernet Header
+    def eth_header(self, data):
+        storeobj = data
+        storeobj = struct.unpack("!6s6sH", storeobj)
+        destination_mac = binascii.hexlify(storeobj[0])
+        source_mac = binascii.hexlify(storeobj[1])
+        eth_protocol = storeobj[2]
+        data = {"Destination Mac": destination_mac,
+                "Source Mac": source_mac,
+                "Protocol": eth_protocol}
+        return data
+
+    # ICMP HEADER Extraction
+    def icmp_header(self, data):
+        icmph = struct.unpack('!BBH', data)
+        icmp_type = icmph[0]
+        code = icmph[1]
+        checksum = icmph[2]
+        data = {'ICMP Type': icmp_type,
+                "Code": code,
+                "CheckSum": checksum}
+        return data
+
+    # UDP Header Extraction
+    def udp_header(self, data):
+        storeobj = struct.unpack('!HHHH', data)
+        source_port = storeobj[0]
+        dest_port = storeobj[1]
+        length = storeobj[2]
+        checksum = storeobj[3]
+        data = {"Source Port": source_port,
+                "Destination Port": dest_port,
+                "Length": length,
+                "CheckSum": checksum}
+        return data
+
+    # IP Header Extraction
+    def ip_header(self, data):
+        storeobj = struct.unpack("!BBHHHBBH4s4s", data)
+        _version = storeobj[0]
+        _tos = storeobj[1]
+        _total_length = storeobj[2]
+        _identification = storeobj[3]
+        _fragment_Offset = storeobj[4]
+        _ttl = storeobj[5]
+        _protocol = storeobj[6]
+        _header_checksum = storeobj[7]
+        _source_address = socket.inet_ntoa(storeobj[8])
+        _destination_address = socket.inet_ntoa(storeobj[9])
+
+        data = {'Version': _version,
+                "Tos": _tos,
+                "Total Length": _total_length,
+                "Identification": _identification,
+                "Fragment": _fragment_Offset,
+                "TTL": _ttl,
+                "Protocol": _protocol,
+                "Header CheckSum": _header_checksum,
+                "Source Address": _source_address,
+                "Destination Address": _destination_address}
+        return data
+
+    # Tcp Header Extraction
+    def tcp_header(self, data):
+        storeobj = struct.unpack('!HHLLBBHHH', data)
+        _source_port = storeobj[0]
+        _destination_port = storeobj[1]
+        _sequence_number = storeobj[2]
+        _acknowledge_number = storeobj[3]
+        _offset_reserved = storeobj[4]
+        _tcp_flag = storeobj[5]
+        _window = storeobj[6]
+        _checksum = storeobj[7]
+        _urgent_pointer = storeobj[8]
+        data = {"Source Port": _source_port,
+                "Destination Port": _destination_port,
+                "Sequence Number": _sequence_number,
+                "Acknowledge Number": _acknowledge_number,
+                "Offset & Reserved": _offset_reserved,
+                "Tcp Flag": _tcp_flag,
+                "Window": _window,
+                "CheckSum": _checksum,
+                "Urgent Pointer": _urgent_pointer
+                }
+        return data
+
+# Mac Address Formating
+
+
+def mac_formater(a):
+    b = "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x" % (ord(a[0]), ord(
+        a[1]), ord(a[2]), ord(a[3]), ord(a[4]), ord(a[5]))
+    return b
+
+
+def get_host(q):
+    try:
+        k = socket.gethostbyaddr(q)
+    except Exception:
+        k = 'Unknown'
+    return k
+
+
+s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0800))
+u = unpack()
+count = 5
+while count > 0:
+    count -= 1
+    # Capture packets from network
+    pkt = s.recvfrom(65565)
+
+    print "\n\n===>> [+] ------------ Ethernet Header----- [+]"
+
+    # print data on terminal
+    for i in u.eth_header(pkt[0][0:14]).iteritems():
+        a, b = i
+        print "{} : {} | ".format(a, b),
+    print "\n===>> [+] ------------ IP Header ------------[+]"
+    for i in u.ip_header(pkt[0][14:34]).iteritems():
+        a, b = i
+        print "{} : {} | ".format(a, b),
+    print "\n===>> [+] ------------ Tcp Header ----------- [+]"
+    for i in u.tcp_header(pkt[0][34:54]).iteritems():
+        a, b = i
+        print "{} : {} | ".format(a, b),