Exemple #1
0
 async def bedrockping(self, ctx, server: str):
     ping = UNCONNECTED_PING()
     ping.pingID = 4201
     ping.encode()
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     s.setblocking(0)
     try:
         s.sendto(ping.buffer, (socket.gethostbyname(server), 19132))
         await asyncio.sleep(.75)
         recvData = s.recvfrom(2048)
     except BlockingIOError:
         await ctx.send(embed=discord.Embed(
             color=discord.Color.green(),
             description="**" + server +
             "** is either offline or unavailable at the moment. Did you type the ip correctly?"
         ))
         return
     except socket.gaierror:
         await ctx.send(embed=discord.Embed(
             color=discord.Color.green(),
             description="**" + server +
             "** is either offline or unavailable at the moment. Did you type the ip correctly?"
         ))
         return
     pong = UNCONNECTED_PONG()
     pong.buffer = recvData[0]
     pong.decode()
     sInfo = str(pong.serverName)[2:-2].split(";")
     pCount = sInfo[4]
     await ctx.send(embed=discord.Embed(color=discord.Color.green(),
                                        description=server +
                                        " is online with " + pCount +
                                        " player(s)."))
Exemple #2
0
def raknet_status(
    ip, port
):  # basically create a mini/shitty raknet client to check the status of BE servers
    if port is None:
        port = 19132

    ping = UNCONNECTED_PING()
    ping.pingID = 4201
    ping.encode()

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #s.setblocking(0) # non blocking
    s.settimeout(2)  # 2 seconds

    time_before = time()
    try:
        s.sendto(ping.buffer, (socket.gethostbyname(ip), port))
        recv_data = s.recvfrom(2048)
    except BlockingIOError:
        return default
    except socket.gaierror:
        return default
    except socket.timeout:
        return default

    pong = UNCONNECTED_PONG()
    pong.buffer = recv_data[0]
    pong.decode()

    latency = round((time() - time_before) * 1000, 2)

    data = pong.serverName.decode('UTF-8').split(';')
    # str(pong.serverName) => https://wiki.vg/Raknet_Protocol#Unconnected_Ping
    # b'MCPE;Nether updateeeeeee!;407;1.16.1;1;20;12172066879061040769;Xenon BE 6.0;Survival;1;19132;19133;'

    s_dict = default.copy()

    s_dict['online'] = True
    s_dict['players_online'] = int(data[4])
    s_dict['players_max'] = int(data[5])
    s_dict['latency'] = latency
    s_dict['version'] = {
        'brand': data[0],  # string
        'software':
        None,  # string, assumes server is vanilla bc pocketmine + nukkit use query
        'protocol': f'raknet {data[2]}',
        'method': 'raknet'
    }
    s_dict['motd'] = data[1]

    try:
        s_dict['map'] = data[7]
        s_dict['gamemode'] = data[8]
    except IndexError:
        pass

    return s_dict
Exemple #3
0
 async def mcstatus(self, ctx):
     await ctx.trigger_typing()
     ping = UNCONNECTED_PING()
     ping.pingID = 4201
     ping.encode()
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     s.setblocking(0)
     try:
         s.sendto(ping.buffer, ("172.10.17.177", 19132))
         await asyncio.sleep(.01)
         recvData = s.recvfrom(2048)
     except BlockingIOError:
         await ctx.send(embed=discord.Embed(
             color=discord.Color.green(),
             description=
             "Xenon BE is either offline or unavailable at the moment. Did you type the ip correctly?"
         ))
         return
     except socket.gaierror:
         await ctx.send(embed=discord.Embed(
             color=discord.Color.green(),
             description=
             "Xenon BE is either offline or unavailable at the moment. Did you type the ip correctly?"
         ))
         return
     pong = UNCONNECTED_PONG()
     pong.buffer = recvData[0]
     pong.decode()
     sInfo = str(pong.serverName)[2:-2].split(";")
     pCount = sInfo[4]
     await ctx.send(
         embed=discord.Embed(color=discord.Color.green(),
                             description="Xenon BE is online with " +
                             pCount + " player(s)."))
     await ctx.trigger_typing()
     status = MinecraftServer.lookup("172.10.17.177:25565")
     try:
         status = status.status()
         await ctx.send(embed=discord.Embed(
             color=discord.Color.green(),
             description=
             "Xenon JE is online with {0} player(s) and a ping of {1} ms.".
             format(status.players.online, status.latency)))
     except Exception:
         await ctx.send(embed=discord.Embed(
             color=discord.Color.green(),
             description=
             "Xenon JE is either offline or unavailable at the moment."))
Exemple #4
0
 def vanilla_pe_ping(self, ip, port):
     ping = UNCONNECTED_PING()
     ping.pingID = 4201
     ping.encode()
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     s.setblocking(0)
     try:
         s.sendto(ping.buffer, (socket.gethostbyname(ip), port))
         sleep(1.5)
         recv_data = s.recvfrom(2048)
     except BlockingIOError:
         return False, 0
     except socket.gaierror:
         return False, 0
     pong = UNCONNECTED_PONG()
     pong.buffer = recv_data[0]
     pong.decode()
     s_info = str(pong.serverName)[2:-2].split(";")
     p_count = s_info[4]
     return True, p_count
Exemple #5
0
data = Binary.writeInt(32)
print(Binary.readInt(data))

data = Binary.writeLong(32)
print(Binary.readLong(data))

data = Binary.writeFloat(32.54)
print(Binary.readFloat(data))

data = Binary.writeDouble(32.3232)
print(Binary.readDouble(data))

print(type(Binary.writeLong(23)))

ping = UNCONNECTED_PING()
ping.pingID = 1234
ping.encode()

p = EncapsulatedPacket()
p.reliability = 2
p.messageIndex = 1

p.buffer = Binary.writeLong(int(900000))

a = 1

data = p.toBinary()
print(data)

split_length = 5