|
@@ -14,7 +14,7 @@ import struct
|
|
|
import commands
|
|
|
import argparse
|
|
|
|
|
|
-VERSION = "0.76"
|
|
|
+VERSION = "0.80"
|
|
|
|
|
|
PROC_TCP4 = "/proc/net/tcp"
|
|
|
PROC_UDP4 = "/proc/net/udp"
|
|
@@ -37,6 +37,7 @@ nostate = set(['04','05','06''07','08','09','0C','0D'])
|
|
|
tcp_payload_hdrs = ['GET|POST|HTTP|HEAD|PUT|PATCH|DELETE|TRACE|OPTIONS|CONNECT']
|
|
|
numeric = False
|
|
|
payloadH = False
|
|
|
+payloadHl = False
|
|
|
fillter = ""
|
|
|
|
|
|
def get_conn_info(proto,hosts,ports):
|
|
@@ -267,6 +268,9 @@ def doPackets(packet):
|
|
|
renew = conn_cache.pop(indx)
|
|
|
conn_cache.append(renew)
|
|
|
|
|
|
+ if program != filter_prog:
|
|
|
+ return
|
|
|
+
|
|
|
|
|
|
o_payload = ""
|
|
|
if packet.haslayer(UDP):
|
|
@@ -294,10 +298,14 @@ def doPackets(packet):
|
|
|
flags = packet[0].sprintf('%3s,TCP.flags%')
|
|
|
if payloadH == True:
|
|
|
if packet.haslayer(Raw):
|
|
|
- tpld = packet[0].sprintf('%TCP.payload%')
|
|
|
+
|
|
|
+ tpld = packet[0][TCP].load
|
|
|
if re.match("^GET|POST|HTTP|HEAD|PUT|PATCH|DELETE|TRACE|OPTIONS|CONNECT.*", tpld[0:8]):
|
|
|
- request_line, gaga = tpld.split('\r\n', 1)
|
|
|
- o_payload = str(request_line)
|
|
|
+ if payloadHl == True:
|
|
|
+ o_payload = str(tpld)
|
|
|
+ else:
|
|
|
+ request_line, gaga = tpld.split('\r\n', 1)
|
|
|
+ o_payload = str(request_line)
|
|
|
|
|
|
elif packet.haslayer(ICMP):
|
|
|
o_proto = "ICMP"
|
|
@@ -325,7 +333,8 @@ def doPackets(packet):
|
|
|
rem_name = _resolve_ip(packet[0][1].dst)
|
|
|
else:
|
|
|
rem_name = packet[0][1].dst
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
return "\033[1m"+str(program)+"\033[0m" +"/"+ str(pid) + " - " + o_proto + ": " + packet[0][1].src + ":" + o_sport + "\033[1m\033[31m ->>> \033[0m" + rem_name + ":" + o_dport + " " + flags + " Len:" + str(packet[0][1].len) + " : " + o_payload
|
|
|
else:
|
|
|
if numeric == False:
|
|
@@ -357,9 +366,11 @@ iface_list = ifaces.split('\n')
|
|
|
print
|
|
|
|
|
|
parser = argparse.ArgumentParser(description='sisniff V'+VERSION)
|
|
|
-parser.add_argument('-i', help="Interface (mandatory)", choices=iface_list, required=True)
|
|
|
+parser.add_argument('-i', help="Interface (required)", choices=iface_list, required=True)
|
|
|
parser.add_argument('-n', help="Do not resolve IP-Addresses", action="store_true")
|
|
|
+parser.add_argument('-p', help="Filter by program name", type=str, metavar='program')
|
|
|
parser.add_argument('-pH', help="Show HTTP Payload", action="store_true")
|
|
|
+parser.add_argument('-pHl', help="Show HTTP Payload, long output", action="store_true")
|
|
|
parser.add_argument('filter', nargs='?', help="Filter (BPF syntax) on top of IP (in dbl-quotes \"...\")", type=str)
|
|
|
args = parser.parse_args()
|
|
|
iface = args.i
|
|
@@ -367,9 +378,15 @@ if args.n:
|
|
|
numeric = True
|
|
|
if args.pH:
|
|
|
payloadH = True
|
|
|
+if args.pHl:
|
|
|
+ payloadH = True
|
|
|
+ payloadHl = True
|
|
|
if args.filter:
|
|
|
fillter = " and (" + args.filter + ")"
|
|
|
print "> Applying Filter: \"ip" + fillter + "\""
|
|
|
+if args.p:
|
|
|
+ filter_prog = args.p
|
|
|
+
|
|
|
|
|
|
|
|
|
MYADDRS = _remove_empty([os.popen('ip addr show '+iface).read().split("inet ")[1].split("/")[0]])
|