diff --git a/tools/RunFinger.py b/tools/RunFinger.py
new file mode 100755
index 0000000..39ce0ea
--- /dev/null
+++ b/tools/RunFinger.py
@@ -0,0 +1,282 @@
+#!/usr/bin/env python
+# This file is part of Responder, a network take-over set of tools
+# created and maintained by Laurent Gaffie.
+# email: laurent.gaffie@gmail.com
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+import re,sys,socket,struct
+import multiprocessing
+from socket import *
+from odict import OrderedDict
+import optparse
+
+__version__ = "0.5"
+
+parser = optparse.OptionParser(usage='python %prog -i 10.10.10.224\nor:\npython %prog -i 10.10.10.0/24', version=__version__, prog=sys.argv[0])
+
+parser.add_option('-i','--ip', action="store", help="Target IP address or class C", dest="TARGET", metavar="10.10.10.224", default=None)
+parser.add_option('-g','--grep', action="store_true", dest="Grep", default=False, help="Output it in grepable format")
+options, args = parser.parse_args()
+
+Timeout = 2
+Host = options.TARGET
+Grep = options.Grep
+
+class Packet():
+ fields = OrderedDict([
+ ])
+ def __init__(self, **kw):
+ self.fields = OrderedDict(self.__class__.fields)
+ for k,v in kw.items():
+ if callable(v):
+ self.fields[k] = v(self.fields[k])
+ else:
+ self.fields[k] = v
+ def __str__(self):
+ return "".join(map(str, self.fields.values()))
+
+def longueur(payload):
+ length = struct.pack(">i", len(''.join(payload)))
+ return length
+
+class SMBHeader(Packet):
+ fields = OrderedDict([
+ ("proto", "\xff\x53\x4d\x42"),
+ ("cmd", "\x72"),
+ ("error-code", "\x00\x00\x00\x00" ),
+ ("flag1", "\x00"),
+ ("flag2", "\x00\x00"),
+ ("pidhigh", "\x00\x00"),
+ ("signature", "\x00\x00\x00\x00\x00\x00\x00\x00"),
+ ("reserved", "\x00\x00"),
+ ("tid", "\x00\x00"),
+ ("pid", "\x00\x00"),
+ ("uid", "\x00\x00"),
+ ("mid", "\x00\x00"),
+ ])
+
+class SMBNego(Packet):
+ fields = OrderedDict([
+ ("Wordcount", "\x00"),
+ ("Bcc", "\x62\x00"),
+ ("Data", "")
+ ])
+
+ def calculate(self):
+ self.fields["Bcc"] = struct.pack("