Thejuster Posted October 28, 2018 Group: Members Topic Count: 10 Topics Per Day: 0.00 Content Count: 28 Reputation: 28 Joined: 09/16/18 Last Seen: May 10, 2023 Share Posted October 28, 2018 Hello i try to make a discord bot whit potential feature. One my problem is try to connection in rAthena Server. Actually i use c# my code //Setting Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse("127.0.0.1"); IPEndPoint host = new IPEndPoint(ip, 6900); soc.Connect(host); //Static Packet byte packet = 0x64; byte[] id = Encoding.ASCII.GetBytes("Thejuster"); byte[] pass = Encoding.ASCII.GetBytes("123456789"); //Packet Builder List<byte> pacchetto = new List<byte>(); //Assembly packet pacchetto.Add(0x64); foreach(byte b in id) { pacchetto.Add(b); } foreach(byte b in pass) { pacchetto.Add(b); } //Send full pachet soc.Send(pacchetto.ToArray()); When i try to connect, rAthena Login Server say this: anyone know reason of this problem? Quote Link to comment Share on other sites More sharing options...
1 Zell Posted October 31, 2018 Group: Members Topic Count: 53 Topics Per Day: 0.01 Content Count: 412 Reputation: 266 Joined: 04/25/12 Last Seen: 21 hours ago Share Posted October 31, 2018 See if this helps you https://stackoverflow.com/questions/11969993/how-send-data-tcp-in-binary-frame-format 1 Quote Link to comment Share on other sites More sharing options...
1 Secrets Posted November 16, 2018 Group: Developer Topic Count: 36 Topics Per Day: 0.01 Content Count: 588 Reputation: 437 Joined: 01/26/16 Last Seen: Wednesday at 03:00 PM Share Posted November 16, 2018 (edited) Structure padding screwed you up there edit: Add Pack = 1 to the StructLayout attribute and change version to uint since ulong is 64 bit integer (8 bytes) Edited November 16, 2018 by Secrets Quote Link to comment Share on other sites More sharing options...
0 jchcc Posted October 28, 2018 Group: Members Topic Count: 1 Topics Per Day: 0.00 Content Count: 37 Reputation: 19 Joined: 03/28/17 Last Seen: October 13, 2021 Share Posted October 28, 2018 https://github.com/rathena/rathena/blob/master/src/login/loginclif.cpp#L273 0064 <version>.L <username>.24B <password>.24B <clienttype>.B Quote Link to comment Share on other sites More sharing options...
0 Thejuster Posted October 31, 2018 Group: Members Topic Count: 10 Topics Per Day: 0.00 Content Count: 28 Reputation: 28 Joined: 09/16/18 Last Seen: May 10, 2023 Author Share Posted October 31, 2018 (edited) Tanks jchcc i miss Last param hehe . Clienttype But one question. .L .24b .B is? Edited October 31, 2018 by Thejuster Quote Link to comment Share on other sites More sharing options...
0 Secrets Posted October 31, 2018 Group: Developer Topic Count: 36 Topics Per Day: 0.01 Content Count: 588 Reputation: 437 Joined: 01/26/16 Last Seen: Wednesday at 03:00 PM Share Posted October 31, 2018 The packet ID (0x64) should be a ushort instead of byte. Quote Link to comment Share on other sites More sharing options...
0 Thejuster Posted November 4, 2018 Group: Members Topic Count: 10 Topics Per Day: 0.00 Content Count: 28 Reputation: 28 Joined: 09/16/18 Last Seen: May 10, 2023 Author Share Posted November 4, 2018 (edited) Tanks Zell i try whit this example. First step is done but server cant read my username or password send in src/loginclif.cpp function /** * Received a connection request. * @param fd: file descriptor to parse from (client) * @param sd: client session * @param command: packet type sent * @param ip: ipv4 address (client) * S 0064 <version>.L <username>.24B <password>.24B <clienttype>.B * S 0277 <version>.L <username>.24B <password>.24B <clienttype>.B <ip address>.16B <adapter address>.13B * S 02b0 <version>.L <username>.24B <password>.24B <clienttype>.B <ip address>.16B <adapter address>.13B <g_isGravityID>.B * S 01dd <version>.L <username>.24B <password hash>.16B <clienttype>.B * S 01fa <version>.L <username>.24B <password hash>.16B <clienttype>.B <?>.B(index of the connection in the clientinfo file (+10 if the command-line contains "pc")) * S 027c <version>.L <username>.24B <password hash>.16B <clienttype>.B <?>.13B(junk) * S 0825 <packetsize>.W <version>.L <clienttype>.B <userid>.24B <password>.27B <mac>.17B <ip>.15B <token>.(packetsize - 0x5C)B * @param fd: fd to parse from (client fd) * @return 0 failure, 1 success */ static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int command, char* ip){ size_t packet_len = RFIFOREST(fd); i see for command 0x64 ( Request login authentification ) S 0064 <version>.L <username>.24B <password>.24B <clienttype>.B my code Packet Structure [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] struct DataPacket { public ushort command; public ulong version; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 24)] //.24B byte, Server Code Ask 24B ( 24 Bytes ) public String Username; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 24)] //Some 24 Byte Lenght public String Password; public byte clienttype; //is wrong? public byte[] Serialize() { // allocate a byte array for the struct data var buffer = new byte[Marshal.SizeOf(typeof(DataPacket))]; // Allocate a GCHandle and get the array pointer var gch = GCHandle.Alloc(buffer, GCHandleType.Pinned); var pBuffer = gch.AddrOfPinnedObject(); Marshal.StructureToPtr(this, pBuffer, false); gch.Free(); return buffer; } // this method will deserialize a byte array into the struct. public void Deserialize(ref byte[] data) { var gch = GCHandle.Alloc(data, GCHandleType.Pinned); this = (DataPacket)Marshal.PtrToStructure(gch.AddrOfPinnedObject(), typeof(DataPacket)); gch.Free(); } } DataPacket packet = new DataPacket(); packet.command = 0x64; packet.version = 55; packet.Username = "Thejuster"; packet.Password = "123456789"; packet.clienttype = 0; var bytes = packet.Serialize(); soc.Send(bytes); If i try to connect whit my code, i see this on server. I see username and password server dont read. Normal Connection whit Ragnarok Client Uhmmm i dont have idea for this problem. I have download roBrowser, and see src. because javascript and c# are similar. i find this i on source // 0x64 PACKET.CA.LOGIN = function PACKET_CA_LOGIN() { this.Version = 0; this.ID = ''; this.Passwd = ''; this.clienttype = 0; }; //Here i think the author build a packet structure. PACKET.CA.LOGIN.prototype.build = function() { // i think is a size of all packet //[2] Command + [4] ???? No have idea. + [24] Username + [24] Password + [1] Client type var pkt_len = 2 + 4 + 24 + 24 + 1; var pkt_buf = new BinaryWriter(pkt_len); pkt_buf.writeShort(0x64); pkt_buf.writeULong(this.Version); pkt_buf.writeString(this.ID, 24); pkt_buf.writeString(this.Passwd, 24); pkt_buf.writeUChar(this.clienttype); return pkt_buf; }; Edited November 4, 2018 by Thejuster Quote Link to comment Share on other sites More sharing options...
0 Zell Posted November 5, 2018 Group: Members Topic Count: 53 Topics Per Day: 0.01 Content Count: 412 Reputation: 266 Joined: 04/25/12 Last Seen: 21 hours ago Share Posted November 5, 2018 I don't think that username and password should be a string Get it? Quote Link to comment Share on other sites More sharing options...
0 Thejuster Posted November 12, 2018 Group: Members Topic Count: 10 Topics Per Day: 0.00 Content Count: 28 Reputation: 28 Joined: 09/16/18 Last Seen: May 10, 2023 Author Share Posted November 12, 2018 nope uhmm here are a problem. look total size sent is 72bytes. Simple i pack command,verion,username,password,clienttype total = 72byte but rAthena server ask: static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int command, char* ip){ size_t packet_len = RFIFOREST(fd); if( (command == 0x0064 && packet_len < 55) //For command 0x64 packet max lenght is 55 byte i use this. 0x64 || (command == 0x0277 && packet_len < 84) || (command == 0x02b0 && packet_len < 85) || (command == 0x01dd && packet_len < 47) || (command == 0x01fa && packet_len < 48) || (command == 0x027c && packet_len < 60) my packet size is 72byte but a conditional branch on server is limited under 55byte. Strange for me. No have idea for wath reason my structure is 72bytes. I follow step by step server parameters and Unmanaged conversion. Quote Link to comment Share on other sites More sharing options...
0 Thejuster Posted April 2, 2019 Group: Members Topic Count: 10 Topics Per Day: 0.00 Content Count: 28 Reputation: 28 Joined: 09/16/18 Last Seen: May 10, 2023 Author Share Posted April 2, 2019 (edited) Hello again try whit this error Connection refused: IP isn't authorised (deny/allow, ip: 127.0.0.1). changed structure to ulong and int to sbyte and work. i have an bytes array around 51bytes total if( (command == 0x0064 && packet_len < 55) And i think now work but server block 127.0.0.1 address Edited April 2, 2019 by Thejuster Quote Link to comment Share on other sites More sharing options...
Question
Thejuster
Hello i try to make a discord bot whit potential feature.
One my problem is try to connection in rAthena Server.
Actually i use c#
my code
When i try to connect, rAthena Login Server say this:
anyone know reason of this problem?
Link to comment
Share on other sites
9 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.