[tor-commits] [bridgedb/master] Rewrite/refactor descriptor generator code

isis at torproject.org isis at torproject.org
Sun Jan 12 06:06:30 UTC 2014


commit 686c3c026e292623ca1f528ecec2d7a70505e7d8
Author: Matthew Finkel <Matthew.Finkel at gmail.com>
Date:   Fri Aug 16 02:16:41 2013 +0000

    Rewrite/refactor descriptor generator code
    
    It should be better this way.
---
 generatedescriptors.py |  131 ++++++++++++++++++++++++++++--------------------
 1 file changed, 77 insertions(+), 54 deletions(-)

diff --git a/generatedescriptors.py b/generatedescriptors.py
index d507401..6f64ca0 100644
--- a/generatedescriptors.py
+++ b/generatedescriptors.py
@@ -8,6 +8,10 @@ from datetime import datetime
 import binascii
 
 
+def usage():
+    print "syntax: generatedescriptors.py <count>\n"\
+          "    count: number of descriptors to generate\n"
+
 def randomIP():
     return randomIP4()
 
@@ -18,8 +22,7 @@ def randomPort():
     return random.randint(1,65535)
 
 def gettimestamp():
-    ts = time.strftime("%Y-%m-%d %H:%M:%S")
-    return "opt published %s\n" % ts
+    return time.strftime("%Y-%m-%d %H:%M:%S")
 
 def getHexString(size):
     s = ""
@@ -27,58 +30,78 @@ def getHexString(size):
         s+= random.choice("ABCDEF0123456789") 
     return s
 
+def generateDesc():
 
-baseDesc = "router Unnamed %s %s 0 9030\n"\
-"opt fingerprint %s\n"\
-"opt @purpose bridge\n"
-
-baseStatus = "r %s %s %s %s %s %d %d\n"\
-"s Running Stable\n"
-
-baseExtraInfo = "extra-info %s %s\n"\
-"transport %s %s:%d\n"
-
-ei = ""
-df = ""
-sf = ""
-for i in xrange(500):
+    baseDesc = "router Unnamed %s %s 0 %s\n"\
+               "opt fingerprint %s\n"\
+               "opt @purpose bridge\n"\
+               "opt published %s\n"\
+               "router-signature\n"
     fp = "DEAD BEEF F00F DEAD BEEF F00F " + \
-        getHexString(4) + " " + getHexString(4) + " " + \
-        getHexString(4) + " " + getHexString(4)
+         getHexString(4) + " " + getHexString(4) + " " + \
+         getHexString(4) + " " + getHexString(4)
+    ip = randomIP()
+    orport = randomPort()
+    dirport = randomPort()
     ID = binascii.a2b_hex(fp.replace(" ", ""))
-
-    sf += "".join(baseStatus % ("namedontmattah", binascii.b2a_base64(ID)[:-2],
-            "randomstring", time.strftime("%Y-%m-%d %H:%M:%S"), randomIP(),
-             randomPort(), randomPort()))
-
-    df += "".join(baseDesc % (randomIP(), randomPort(), fp))
-    df += gettimestamp()
-    df += "router-signature\n"
-
-    if i % 4 == 0:
-        ei += "".join(baseExtraInfo % ("namedontmattah", fp.replace(" ", ""),
-                                       random.choice(["obfs2", "obfs3", "obfs2"]),
-                                       randomIP(), randomPort()))
-
-ei += "router-signature\n"
-
-try:
-    f = open("networkstatus-bridges", 'w')
-    f.write(sf)
-    f.close()
-except:
-    print "Failed to open status file"
-
-try:
-    f = open("bridge-descriptors", 'w')
-    f.write(df)
-    f.close()
-except:
-    print "Failed to open df file"
-
-try:
-    f = open("extra-infos", 'w')
-    f.write(ei)
-    f.close()
-except:
-    print "Failed to open ei file"
+    df =  baseDesc % (ip, orport, dirport, fp, gettimestamp())
+    return (df, (ID, ip, orport, dirport))
+
+def generateStatus(info, ID=None, ip=None, orport=None, dirport=None):
+    baseStatus = "r %s %s %s %s %s %d %d\n"\
+                 "s Running Stable\n"
+
+    if info and len(info) == 4:
+        ID = info[0]
+        ip = info[1]
+        orport = info[2]
+        dirport = info[3]
+    return "".join(baseStatus % ("namedontmattah", binascii.b2a_base64(ID)[:-2],
+           "randomstring", gettimestamp(), ip,
+            orport, dirport))
+
+def generateExtraInfo(fp, ip=None):
+    baseExtraInfo = "extra-info %s %s\n"\
+                    "transport %s %s:%d\n"\
+                    "router-signature\n"
+    if not ip:
+        ip = randomIP()
+    return "".join(baseExtraInfo % ("namedontmattah", fp,
+                                    random.choice(["obfs2", "obfs3", "obfs2"]),
+                                    ip, randomPort()))
+if __name__ == "__main__":
+    if len(sys.argv) != 2:
+        usage()
+        sys.exit(0)
+
+    df = ''
+    sf = ''
+    ei = ''
+    count = int(sys.argv[1])
+    for i in xrange(count):
+        desc, info = generateDesc()
+        df += desc
+
+        sf += generateStatus(info)
+	ei += generateExtraInfo(binascii.b2a_hex(info[0]))
+        
+    try:
+        f = open("networkstatus-bridges", 'w')
+        f.write(sf)
+        f.close()
+    except:
+        print "Failed to open or write to status file"
+
+    try:
+        f = open("bridge-descriptors", 'w')
+        f.write(df)
+        f.close()
+    except:
+        print "Failed to open or write to descriptor file"
+
+    try:
+        f = open("extra-infos", 'w')
+        f.write(ei)
+        f.close()
+    except:
+        print "Failed to open or write to extra-info file"





More information about the tor-commits mailing list