tools / app.py
Gabriel Sabau
feat: update gradio version
ed955b1
raw
history blame
5.17 kB
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))