Upload files to "/"

master
Joseph 2024-10-27 07:49:20 +00:00
commit c6dba8d67a
2 changed files with 367 additions and 0 deletions

206
checkhost.py 100644
View File

@ -0,0 +1,206 @@
import discord, asyncio
from subprocess import Popen, PIPE
from discord.ext import commands, tasks
import sys, os, socket, json
import requests
import subprocess
token = "DREADFUL DREADFUL" #CHNAGE ME!!!
client = commands.Bot(command_prefix = '!n', case_insensitive=True)
client.remove_command("help")
# ██████╗ ██████╗ ███████╗ █████╗ ██████╗ ███████╗██╗ ██╗██╗
# ██╔══██╗██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔════╝██║ ██║██║
# ██║ ██║██████╔╝█████╗ ███████║██║ ██║█████╗ ██║ ██║██║
# ██║ ██║██╔══██╗██╔══╝ ██╔══██║██║ ██║██╔══╝ ██║ ██║██║
# ██████╔╝██║ ██║███████╗██║ ██║██████╔╝██║ ╚██████╔╝███████╗
# ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═════╝ ╚══════╝
#
# Discord.py script using the checkhost JSON api it's very
# more than 30 minutes to make so there most likely is some
# issues but I've fixed all that I've seen.
nodes = "10" #number of checkhost requests
@client.event
async def on_command_error(ctx, error):
if isinstance(error, commands.CommandOnCooldown):
await ctx.send('This command is on cooldown. Please wait %.2fs' % error.retry_after)
elif isinstance(error, commands.errors.MissingPermissions):
embed=discord.Embed(description="You do not have permissions to use this command", color=0x8000ff)
await ctx.send(embed=embed)
elif isinstance(error, commands.errors.MissingRequiredArgument):
embed=discord.Embed(description="Missing an arg!", color=0x8000ff)
await ctx.send(embed=embed)
@client.command()
async def help(ctx):
embed=discord.Embed(title="__**DREADFUL**__",description=f"""
{ctx.prefix}ping - IMCP request results
{ctx.prefix}tcping - TCP request results
{ctx.prefix}http - HTTP request results
{ctx.prefix}lookup - GEO ip information""", color=0x8000ff)
await ctx.send(embed=embed)
@client.command()
async def lookup(ctx, ip):
try:
socket.gethostbyname(ip)
geodat = ("http://ip-api.com/line/"+ip+"?fields=message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,timezone,offset,currency,isp,org,as,asname,reverse,query")
resolve = requests.get(geodat)
embed = discord.Embed(title="__**DREADFUL**__",description=f"%s"%(resolve.text),color=0x8000ff)
await ctx.send(embed=embed)
except socket.gaierror:
await ctx.send(f"{ip} is invaid please retry")
@commands.cooldown(rate=1, per=5, type=commands.BucketType.channel)
@client.command()
async def ping(ctx, ip):
try:
socket.gethostbyname(ip)
await loading(ctx)
jsonfood = requests.get('https://check-host.net/check-ping?host='+ip+'&max_nodes='+nodes,headers={'Accept': 'application/json'})
jsonfood = jsonfood.text
j = json.loads(jsonfood)
req_id = j["request_id"]
await asyncio.sleep(10)
jsonfood = requests.get('https://check-host.net/check-result/'+req_id,headers={'Accept': 'application/json'})
jsonfood = jsonfood.text
j = json.loads(jsonfood)
embed=discord.Embed(title="__**DREADFUL**__", description=f"ICMP response check-host result on {ip}", color=0x8000ff)
embed.set_thumbnail(url="https://check-host.net/checkhost-favicon.png")
#print(site_shit)
for x in j :
timeout = 0
#print(x)
try:
for y in j[x][0]:
if 'OK' in y:
timeout = timeout + 1
except TypeError:
timeout = 0
if timeout == 4:
emoji = ":white_check_mark:"
if timeout < 4:
if timeout > 1:
emoji = ":warning:"
if timeout < 2 :
emoji = ":x:"
x = x.replace('.check-host.net', '')
flagemoji = ":flag_"+x[0]+x[1]+":"
embed.add_field(name=flagemoji+" "+x, value='RESULTS: '+emoji+' '+str(timeout)+'/4', inline=True)
#print('RESULTS: '+str(timeout)+'/4')
embed.set_footer(text=f"requested by {ctx.author.name} | https://check-host.net/check-result/"+req_id)
await ctx.send(embed=embed)
except socket.gaierror:
await ctx.send(f"{ip} is invaid please retry")
async def loading(ctx):
embed=discord.Embed(title="__**DREADFUL**__", description=f"Please allow 10 seconds for the request", color=0x8000ff)
embed.set_thumbnail(url="https://i.imgur.com/llF5iyg.gif")
await ctx.send(embed=embed)
@commands.cooldown(rate=1, per=5, type=commands.BucketType.channel)
@client.command()
async def tcping(ctx, ip, port="80"):
try:
lmao = int(port)
socket.gethostbyname(ip)
await loading(ctx)
jsonfood = requests.get('https://check-host.net/check-tcp?host='+ip+":"+port+'&max_nodes='+nodes,headers={'Accept': 'application/json'}).text
j = json.loads(jsonfood)
req_id = j["request_id"]
await asyncio.sleep(10)
jsonfood = requests.get('https://check-host.net/check-result/'+req_id,headers={'Accept': 'application/json'})
jsonfood = jsonfood.text
j = json.loads(jsonfood)
embed=discord.Embed(title="__**DREADFUL**__", description=f"TCP response check-host result on {ip}:{port}", color=0x8000ff)
embed.set_thumbnail(url="https://check-host.net/checkhost-favicon.png")
ptimeout = "Error "
for x in j :
timeout = 0
#print(x)
try:
for y in j[x][0]:
if 'time' in y:
timeout = timeout + 1
ptimeout = j[x][0]["time"]
ptimeout = str(int(ptimeout*1000))
except TypeError:
timeout = 0
if timeout == 1:
emoji = ":white_check_mark:"
if timeout == 0 :
emoji = ":x:"
x = x.replace('.check-host.net', '')
flagemoji = ":flag_"+x[0]+x[1]+":"
embed.add_field(name=flagemoji+" "+x, value=emoji+' '+str(ptimeout)+'ms', inline=True)
#print('RESULTS: '+str(timeout)+'/4')
embed.set_footer(text=f"requested by {ctx.author.name} | https://check-host.net/check-result/"+req_id)
await ctx.send(embed=embed)
except socket.gaierror:
await ctx.send(f"{ip} is invaid please retry")
@commands.cooldown(rate=1, per=5, type=commands.BucketType.channel)
@client.command()
async def http(ctx, ip):
try:
socket.gethostbyname(ip)
await loading(ctx)
jsonfood = requests.get('https://check-host.net/check-http?host='+ip+'&max_nodes='+nodes,headers={'Accept': 'application/json'})
jsonfood = jsonfood.text
j = json.loads(jsonfood)
req_id = j["request_id"]
await asyncio.sleep(10)
jsonfood = requests.get('https://check-host.net/check-result/'+req_id,headers={'Accept': 'application/json'})
jsonfood = jsonfood.text
j = json.loads(jsonfood)
embed=discord.Embed(title="__**DREADFUL**__", description=f"HTTP response check-host result on {ip}", color=0x8000ff)
embed.set_thumbnail(url="https://check-host.net/checkhost-favicon.png")
for x in j :
timeout = 0
#print(x)
try:
for y in j[x][0]:
emoji = ":x:"
if 100 <= int(j[x][0][3]) <= 199:
emoji = ":globe_with_meridians: "
if 200 <= int(j[x][0][3]) <= 299:
emoji = ":white_check_mark:"
if 300 <= int(j[x][0][3]) <= 399:
emoji = ":warning:"
if 400 <= int(j[x][0][3]) <= 599:
emoji = ":x:"
ptimeout = j[x][0][2]
except TypeError:
emoji = ":x:"
ptimeout = "Failed to get info"
x = x.replace('.check-host.net', '')
flagemoji = ":flag_"+x[0]+x[1]+":"
embed.add_field(name=flagemoji+" "+x, value=emoji+' '+str(ptimeout), inline=True)
embed.set_footer(text=f"requested by {ctx.author.name} | https://check-host.net/check-result/"+req_id)
await ctx.send(embed=embed)
except socket.gaierror:
await ctx.send(f"{ip} is invaid please retry")
@client.event
async def on_ready():
await client.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name=f'my master | !nhelp'))
print('''
\x1b[38;5;197m
\x1b[38;5;198m
\x1b[38;5;199m x1b[0mo \x1b[38;5;199m
\x1b[0mDiscord bot for the Check host JSON API
''')
print(" disc.py Version: "+discord.__version__)
client.run(token, bot=True)

161
checkhost_cli.py 100644
View File

@ -0,0 +1,161 @@
import asyncio
import socket
import json
import requests
from rich.console import Console
from rich.table import Table
from rich.panel import Panel
from rich.align import Align
from rich.prompt import Prompt
from rich.progress import Progress
# Set up Rich Console
console = Console()
nodes = "10" # Number of checkhost requests
# Helper Functions
async def lookup(ip):
try:
socket.gethostbyname(ip)
fields = "query,status,message,continent,continentCode,country,countryCode,region,regionName,city,zip,lat,lon,timezone,offset,currency,isp,org,as,asname,reverse,mobile,proxy,hosting"
geodat = f"http://ip-api.com/json/{ip}?fields={fields}"
response = requests.get(geodat).json()
# Create a Rich Table for results
table = Table(title=f"[bold cyan]Geo-IP Lookup for {ip}[/bold cyan]", show_lines=True)
table.add_column("Field", style="bold magenta")
table.add_column("Value", style="bold white")
ordered_fields = [
"query", "status", "message", "continent", "continentCode", "country", "countryCode",
"region", "regionName", "city", "zip", "lat", "lon", "timezone", "offset",
"currency", "isp", "org", "as", "asname", "reverse", "mobile", "proxy",
"hosting"
]
# Add data to the table
for field in ordered_fields:
value = response.get(field, "N/A")
table.add_row(field.capitalize(), str(value))
console.print(table)
except socket.gaierror:
console.print(f"[bold red]Error:[/bold red] Invalid IP address '{ip}'. Please enter a valid IP.", style="bold red")
async def ping(ip):
try:
socket.gethostbyname(ip)
jsonfood = requests.get(f'https://check-host.net/check-ping?host={ip}&max_nodes={nodes}', headers={'Accept': 'application/json'}).text
req_id = json.loads(jsonfood)["request_id"]
# Loading spinner
with Progress(transient=True) as progress:
task = progress.add_task("[cyan]Pinging...[/cyan]", total=None)
await asyncio.sleep(10) # Simulating a wait for 10 seconds
jsonfood = requests.get(f'https://check-host.net/check-result/{req_id}', headers={'Accept': 'application/json'}).text
j = json.loads(jsonfood)
# Table for Ping Results
table = Table(title=f"[bold cyan]Ping Test Results for {ip}[/bold cyan]", show_lines=True)
table.add_column("Node", style="bold magenta")
table.add_column("Status", style="bold white")
for x in j:
timeout = sum(1 for y in j[x][0] if 'OK' in y) if j[x][0] else 0
emoji = "" if timeout == 4 else "⚠️" if timeout > 1 else ""
node = x.replace('.check-host.net', '')
table.add_row(node, f"{emoji} {timeout}/4")
console.print(table)
except socket.gaierror:
console.print(f"[bold red]Error:[/bold red] Invalid IP address '{ip}'. Please enter a valid IP.", style="bold red")
async def tcping(ip, port="80"):
try:
socket.gethostbyname(ip)
jsonfood = requests.get(f'https://check-host.net/check-tcp?host={ip}:{port}&max_nodes={nodes}', headers={'Accept': 'application/json'}).text
req_id = json.loads(jsonfood)["request_id"]
# Loading spinner
with Progress(transient=True) as progress:
task = progress.add_task("[cyan]Running TCPing...[/cyan]", total=None)
await asyncio.sleep(10) # Simulating a wait for 10 seconds
jsonfood = requests.get(f'https://check-host.net/check-result/{req_id}', headers={'Accept': 'application/json'}).text
j = json.loads(jsonfood)
# Table for TCPing Results
table = Table(title=f"[bold cyan]TCPing Test Results for {ip}:{port}[/bold cyan]", show_lines=True)
table.add_column("Node", style="bold magenta")
table.add_column("Status", style="bold white")
for x in j:
timeout = sum(1 for y in j[x][0] if 'time' in y) if j[x][0] else 0
ptimeout = str(int(j[x][0]["time"] * 1000)) + " ms" if timeout else "Error"
emoji = "" if timeout == 1 else ""
node = x.replace('.check-host.net', '')
table.add_row(node, f"{emoji} {ptimeout}")
console.print(table)
except socket.gaierror:
console.print(f"[bold red]Error:[/bold red] Invalid IP address '{ip}'. Please enter a valid IP.", style="bold red")
async def http(ip):
try:
socket.gethostbyname(ip)
jsonfood = requests.get(f'https://check-host.net/check-http?host={ip}&max_nodes={nodes}', headers={'Accept': 'application/json'}).text
req_id = json.loads(jsonfood)["request_id"]
# Loading spinner
with Progress(transient=True) as progress:
task = progress.add_task("[cyan]Checking HTTP...[/cyan]", total=None)
await asyncio.sleep(10) # Simulating a wait for 10 seconds
jsonfood = requests.get(f'https://check-host.net/check-result/{req_id}', headers={'Accept': 'application/json'}).text
j = json.loads(jsonfood)
# Table for HTTP Results
table = Table(title=f"[bold cyan]HTTP Test Results for {ip}[/bold cyan]", show_lines=True)
table.add_column("Node", style="bold magenta")
table.add_column("Status", style="bold white")
for x in j:
code = int(j[x][0][3]) if j[x][0] else 0
emoji = "" if 200 <= code <= 299 else "⚠️" if 300 <= code <= 399 else ""
ptimeout = j[x][0][2] if j[x][0] else "Failed to get info"
node = x.replace('.check-host.net', '')
table.add_row(node, f"{emoji} {ptimeout}")
console.print(table)
except socket.gaierror:
console.print(f"[bold red]Error:[/bold red] Invalid IP address '{ip}'. Please enter a valid IP.", style="bold red")
# Main UI with Rich Panel
console.print(Panel(Align.center("Network Tools Console UI", style="bold cyan"), padding=(1, 2), border_style="blue"))
def main():
while True:
console.print(Panel("Choose an option:\n[1] Lookup\n[2] Ping\n[3] TCPing\n[4] HTTP\n[Q] Quit", style="bold green"))
choice = Prompt.ask("[bold yellow]Enter choice[/bold yellow]").strip().lower()
if choice == "q":
console.print("[bold red]Exiting...[/bold red]")
break
ip = Prompt.ask("[bold yellow]Enter IP Address[/bold yellow]").strip()
if choice == "1":
asyncio.run(lookup(ip))
elif choice == "2":
asyncio.run(ping(ip))
elif choice == "3":
port = Prompt.ask("[bold yellow]Enter Port (default: 80)[/bold yellow]", default="80")
asyncio.run(tcping(ip, port))
elif choice == "4":
asyncio.run(http(ip))
else:
console.print("[bold red]Invalid choice. Try again.[/bold red]")
if __name__ == "__main__":
main()