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))