Added --list option. Shows current banned ip's
This commit is contained in:
parent
1b857495dc
commit
ea4573371d
2 changed files with 54 additions and 35 deletions
75
py/client.py
75
py/client.py
|
|
@ -26,59 +26,66 @@ def conctruct_json(ban_list: Iterable[ipaddress.IPv4Address] | Iterable[ipaddres
|
||||||
|
|
||||||
return json.dumps(json_map)
|
return json.dumps(json_map)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
def recv_all(conn: socket.socket) -> bytes:
|
||||||
parser = argparse.ArgumentParser()
|
chunks = []
|
||||||
parser.add_argument("-b","--ban",nargs="+",type=str,
|
|
||||||
help="ban ip's")
|
|
||||||
parser.add_argument("-u", "--uban", nargs="+", type=str,
|
|
||||||
help="unban ip's")
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
|
while True:
|
||||||
|
data = conn.recv(4096)
|
||||||
|
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
chunks.append(data)
|
||||||
|
return b"".join(chunks)
|
||||||
|
|
||||||
|
def req_list(client: socket.socket):
|
||||||
|
client.sendall(b"list")
|
||||||
|
client.shutdown(socket.SHUT_WR)
|
||||||
|
|
||||||
|
daemon_responce = recv_all(client).decode()
|
||||||
|
out_dict = json.loads(daemon_responce)
|
||||||
|
print(json.dumps(out_dict, indent=2))
|
||||||
|
|
||||||
|
def req_action(sock_path:socket.socket, args):
|
||||||
conflicts_ban_uban = False
|
conflicts_ban_uban = False
|
||||||
if args.ban != None and args.uban != None:
|
if args.ban != None and args.uban != None:
|
||||||
conflicts_ban_uban = not (set(args.ban).isdisjoint(args.uban))
|
conflicts_ban_uban = not (set(args.ban).isdisjoint(args.uban))
|
||||||
if conflicts_ban_uban:
|
if conflicts_ban_uban:
|
||||||
print("--ban and --uban must not contain common element(s)")
|
print("--ban and --uban must not contain common element(s)")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if args.ban != None:
|
if args.ban != None:
|
||||||
ip_to_ban = [ipaddress.IPv4Address(ip) for ip in args.ban]
|
ip_to_ban = [ipaddress.IPv4Address(ip) for ip in args.ban]
|
||||||
else:
|
else:
|
||||||
ip_to_ban = []
|
ip_to_ban = []
|
||||||
|
|
||||||
if args.uban != None:
|
if args.uban != None:
|
||||||
ip_to_uban = [ipaddress.IPv4Address(ip) for ip in args.uban]
|
ip_to_uban = [ipaddress.IPv4Address(ip) for ip in args.uban]
|
||||||
else:
|
else:
|
||||||
ip_to_uban = []
|
ip_to_uban = []
|
||||||
|
|
||||||
request = "action\n" + conctruct_json(ip_to_ban, ip_to_uban)
|
request = "action\n" + conctruct_json(ip_to_ban, ip_to_uban)
|
||||||
|
|
||||||
socket_path = "/run/ipban/ipban.sock"
|
socket_path = "/run/ipban/ipban.sock"
|
||||||
|
|
||||||
client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
client.sendall(request.encode())
|
||||||
client.connect(socket_path)
|
|
||||||
|
|
||||||
req = """action
|
|
||||||
{
|
|
||||||
"ban": {
|
|
||||||
"1.2.3.4": {
|
|
||||||
"remark": "Cloudflare's web",
|
|
||||||
"reason": "bot"
|
|
||||||
},
|
|
||||||
"8.8.8.8": {
|
|
||||||
"remark": "",
|
|
||||||
"reason": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"uban": {
|
|
||||||
"1.4.4.6": {
|
|
||||||
"reason": "Misstake"
|
|
||||||
},
|
|
||||||
"1.0.0.1": {
|
|
||||||
"reason": "DNS"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
req = request
|
|
||||||
client.sendall(req.encode())
|
|
||||||
client.shutdown(socket.SHUT_WR)
|
client.shutdown(socket.SHUT_WR)
|
||||||
print(client.recv(4096).decode())
|
print(client.recv(4096).decode())
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("-b","--ban",nargs="+",type=str,metavar="ip",
|
||||||
|
help="ban ip's")
|
||||||
|
parser.add_argument("-u", "--uban", nargs="+", type=str,metavar="ip",
|
||||||
|
help="unban ip's")
|
||||||
|
parser.add_argument("-l", "--list", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
socket_path = "/run/ipban/ipban.sock"
|
||||||
|
client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
client.connect(socket_path)
|
||||||
|
if args.ban != None and args.uban != None:
|
||||||
|
req_action(client,args)
|
||||||
|
if args.list:
|
||||||
|
req_list(client)
|
||||||
|
|
|
||||||
14
py/daemon.py
14
py/daemon.py
|
|
@ -143,8 +143,20 @@ def action(sql_conn: sqlite3.Connection, conn: socket.socket, data: str):
|
||||||
conn.sendall(b"ok")
|
conn.sendall(b"ok")
|
||||||
|
|
||||||
def list_ips(sql_conn: sqlite3.Connection, conn: socket.socket, data: str):
|
def list_ips(sql_conn: sqlite3.Connection, conn: socket.socket, data: str):
|
||||||
|
ban_t_name="banned"
|
||||||
data = data[data.find('\n')+1:] #strip req_type
|
data = data[data.find('\n')+1:] #strip req_type
|
||||||
|
rows = sql_conn.execute(f"SELECT ban_time,ip,remark,reason FROM {ban_t_name}").fetchall()
|
||||||
|
response_json = {}
|
||||||
|
print(rows)
|
||||||
|
for row in rows:
|
||||||
|
response_json[row[1]] = {
|
||||||
|
"ban_time": row[0],
|
||||||
|
"ban_remark": row[2],
|
||||||
|
"ban_reason": row[3]
|
||||||
|
}
|
||||||
|
response = json.dumps(response_json)
|
||||||
|
conn.sendall(response.encode())
|
||||||
|
conn.shutdown(socket.SHUT_WR)
|
||||||
|
|
||||||
def recv_all(conn: socket.socket) -> bytes:
|
def recv_all(conn: socket.socket) -> bytes:
|
||||||
chunks = []
|
chunks = []
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue