File size: 5,167 Bytes
236f43c 79f993e 491fe7e 144c5a1 058edcf 59ed8ba 430c2f6 754305e 058edcf ed955b1 504cdb5 328f94a 7443b9e 504cdb5 fcbec58 058edcf 491fe7e ed955b1 491fe7e 236f43c ed955b1 236f43c dde30fa 2f6c49d ed955b1 2f6c49d 491fe7e 2f6c49d 058edcf 491fe7e 236f43c 430c2f6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import gradio as gr
from utils.gradio_utils import *
import os
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from dotenv import load_dotenv
load_dotenv(dotenv_path=".env", override=True)
USER = os.getenv("USERNAME")
PASS = os.getenv("PASSWORD")
# create an interface and limit output's width for the dataframe bu
list_iface = gr.Interface(fn=compute_offer,
inputs=[gr.File(label="Upload CSV", type="filepath"),
gr.Slider(0, 365, value=3, step=1, label="Days", info="Number of days to look back"),
gr.Slider(5000, 10000000, value=1000000, step=1, label="Minimum Sent", info="Minimum number of emails sent"),
gr.Dropdown(["Comcast", "Yahoo", "Hotmail", "Aol"], value="Yahoo", label="Domain"),
gr.Dropdown(["All", "Team 1", "Team 2"], value="Team 2", label="Team"),
gr.Radio(["Newsletters", "Offers", 'Offers - IDs only'], label="Type", value="Offers - IDs only"),
gr.Textbox(label="Exclude list", info="Example: INH,MNP", value="INH,DHI,HHP,RTA,JVR,HTH,FNC,SCD,ENH,WIP")],
outputs="dataframe")
# PLOTTING
def plot_df(filename):
# Read the file into a pandas DataFrame
df = pd.read_csv(filename.name)
df["timeLogged"] = pd.to_datetime(df["timeLogged"])
zztitle = filename.name.split('_')[1]
fig, ax = plt.subplots(figsize=(20, 10))
sns.lineplot(x='timeLogged', y='delivered', hue='dlvSourceIp', data=df.reset_index())
# set x axis extract only hour and minute from datetime
ax.set_title(zztitle)
ax.set_ylabel('Number of emails delivered')
ax.set_xlabel('Date')
ax.legend(loc='upper left')
# allign ticks at 45 degrees
plt.xticks(rotation=90)
return fig
plt_iface = gr.Interface(fn=plot_df,
inputs=gr.File(label="Upload CSV", type="filepath"),
outputs=gr.Plot())
###
domains_template = """
example.com
"""
with gr.Blocks() as aeon:
with gr.Tab(label="SWAKS"):
with gr.Row():
with gr.Column():
ip_addresses_raw = gr.Textbox(lines=2, value="192.168.1.1/24", label="IP Classes")
with gr.Column():
with gr.Row():
with gr.Column():
max_ips = gr.Number(value=0, label="Max IPs to search for before stopping")
with gr.Column():
sample_size = gr.Number(value=5, label="Number of commands per subdomain")
domains = gr.Textbox(lines=5, max_lines=5,value=domains_template, label="Domains")
with gr.Row():
header_box = gr.Textbox(label="Header Used to Create Commands", visible=False)
max_ips.change(fn=update_header, inputs=max_ips, outputs=header_box)
with gr.Row():
with gr.Column():
# gen_cmds_btn = gr.Button(label="Generate Commands")
gen_cmds_btn = gr.Button("Generate Commands")
# with gr.Column():
# reset_btn = gr.ClearButton(components=[ip_subclasses_raw, num_of_ips, domains_raw])
with gr.Row():
cmds = gr.Code(lines=20, value="Generate Commands")
gen_cmds_btn.click(fn=generate_cmds_from_bulk, inputs=[ip_addresses_raw, domains, max_ips, sample_size], outputs=[cmds])
with gr.Accordion("Tips and tricks"):
gr.Markdown("""The subdomains are IPs from [1-19] and [201-254].
- Copy the commands and copy them in a file `nano check.sh` and paste and save.
- Run in terminal `sh check.sh` and wait for it to finish
- There will two types of files: `bune_IP_addr.txt` and `blocate_IP_addr.txt`
- To get all the good IPs run: `cat bune*`
""")
with gr.Tab(label="Mix domains and IPs"):
with gr.Row():
with gr.Column():
ip_subclasses_raw = gr.Textbox(label="IP Subclasses plain text", \
value="""192.168.1.1/24""", lines=2)
with gr.Column():
num_of_ips = gr.Number(label="Number of IPs per /24", value=4)
with gr.Row():
domains_raw = gr.Textbox(label="Domains", value="gogu.com\nasd.com\ndsa.com\ngigi.com")
greet_btn = gr.Button("Compute IPs")
output_ips = gr.Textbox(label="List of IPs")
greet_btn.click(fn=generate_ips_per_subclass, inputs=[ip_subclasses_raw, num_of_ips],\
outputs=output_ips)
output_mix = gr.Code(label="Mixed IPs and Domains")
with gr.Row():
with gr.Column():
reset_btn = gr.ClearButton(value="Reset", components=[ip_subclasses_raw, domains_raw])
with gr.Column():
mix_btn = gr.Button("Mix IPs and Domains")
mix_btn.click(fn=mix, inputs=[domains_raw, output_ips, num_of_ips],
outputs=output_mix)
with gr.Tab(label="Top Lists"):
list_iface.render()
with gr.Tab(label="Plot"):
plt_iface.render()
aeon.launch(auth=(USER, PASS)) |