darknet-lantern/scripts/darknet_exploration.py
nihilist 61955f6c67 wip
2025-01-02 08:47:42 +01:00

138 lines
5.5 KiB
Python

import os, pwd
def main():
rootpath='/srv/darknet-onion-webring/'
urlpath=pwd.getpwuid(os.getuid()).pw_dir+"/.darknet_participant_url"
print(urlpath)
isitvalid="n"
#check if ~/.darknet_participant_url exists,
# if exists, instance= the content of ~/.darknet_participant_url (which is the url: such as uptime.nowherejez...onion)
while isitvalid != "y":
if os.path.isfile(urlpath):
with open(urlpath) as f:
instance = f.read()
# TODO check if the instance URL domain is valid
instancepath=rootpath+'www/participants/'+instance
print("[+] file exists, your Webring URL is ", instance)
isitvalid = "y"
else:
print("[+] Instance Path doesn't exist yet")
# and ask for the instance URL domain
instance = input("What is your Instance domain ? (ex: uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion):")
instancepath=rootpath+'www/participants/'+instance
# TODO check if the instance URL domain is valid
# ask the user if the instance URL is valid ?
print()
print(instance)
isitvalid=input("Is your this your instance domain ?")
# if yes, then write it into ~/.darknet_participant_url
if isitvalid != "y" :
print("OK writing the instance url to ~/.darknet_participants_url")
with open(urlpath, "w") as file:
file.write(instance)
print("[+] file written, let's read it")
f = open(urlpath,"r")
print(f.read())
print("[+] Initial Setup Completed!")
print("[+] Welcome to the Darknet Onion Webring, where you are exploring the Darknet and helping others do the same.")
print("""
1) add a new entry (into unverified.csv)
2) verify an entry (move an entry from unverified to verified.csv)
3) add a new webring participant (and download their files into their directory (without trusting them yet!))
4) trust a webring participant (Potentially dangerous)
""")
option = input("Select Option? (1-4)")
print(option)
match option:
case "1":
print("[+] Add a new Entry (into unverified.csv)")
# ask for the following:
unverifiedpath=instancepath+'/unverified.csv'
# the name of the website (required)
entry_name = input("What is the Website name ?")
# the url of the website (required)
entry_url = input("What is URL of the Website ? (ex: https://torproject.org or http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion")
# a quick description (optional)
entry_url = input("(Optional) Description of the website ? (max 256 characters) (press enter to skip)"
# sensitive ? (y/n)
entry_url = input("is it a sensitive website ? (ex: website related to drugs)"
# (rest is automatic: status, score, instance is = '' because it is your own instance)
# check if the entry doesn't already exist in verified.csv and in unverified.csv
# if it doesnt exist, add it into unverified.csv
case "2":
print("[+] Verify an entry (move an entry from unverified.csv to verified.csv)")
# search for a word
# and display only the matching entries in an array format (display it in CLI).
# Each of the rows must have an index,
# prompt the user to ask for with row they want to move to verified.csv
# once selected, it must be able to print that row, and:
# append it into verified.csv
# remove it from unverified.csv
# print completed! You are now listing [name] (url) (sensitive).
case "3":
print("[+] add a new webring participant (and download their files into their directory (without trusting them yet!))")
# ask for the url to the other webring participant
# check if the url is valid or not: at http://URL.onion/participants/URL.onion/{verified.csv,unverified.csv,sensitive.csv,blacklist.csv,webring-participants.csv}
case "4":
print("[+] trust a webring participant (Potentially dangerous)")
# list the existing webring participants from webring-participants.csv and
# ask the user to pick the index (0-9?) of the instance to trust
# if index is valid, then mark the instance as trusted in webring-participants.csv
case _:
print("[-] ERROR, incorrect input")
def IsOnionValid(domain):
# check if the characters are only [a-zA-Z0-9.] with maximum 128 chars max?
# check that it is only url.onion or subdomain.url.onion,
# if OK return True
#if not : return False
return True
def IsUrlValid(url):
# check if the characters are only [a-zA-Z0-9.:/] with maximum 128 chars max?
# check that it is only http(s)://wordA.wordB or http(s)://WordC.WordB.WordC, (onion or not), clearnet is fine too (double check if those are fine!)
# if OK return True
#if not : return False
return True
def IsStatusValid(status):
# check if the characters are only [vx] with maximum 1 chars max
# if OK return True
#if not : return False
return True
def IsDescriptionValid(desc):
# check if the characters are only [a-zA-Z0-9.,' ] with maximum 256 chars max
#(careful with the ' and , make sure you test if it fucks the csv up or else)
# if OK return True
#if not : return False
return True
def IsCategoryValid(category):
# check if the characters are only [a-zA-Z0-9 ] with maximum 64 chars max
#(careful with the ' and , make sure you test if it fucks the csv up or else)
# if OK return True
#if not : return False
return True
def IsNameValid(name):
# check if the characters are only [a-zA-Z0-9 ] with maximum 64 chars max
#(careful with the ' and , make sure you test if it fucks the csv up or else)
# if OK return True
#if not : return False
return True
if __name__ == '__main__':
main()