public static void Run() { Core.Initialize(); RegisterOpcodes(); loginSocket = Core.StartUDPReceiver(IPAddress.Parse("127.0.0.1"), 0, OnReceive); loginEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000); var random = new RNGCryptoServiceProvider(); var randoma = new byte[20]; random.GetBytes(randoma); randoma[randoma.Length - 1] &= 0x7F; a = new BigInteger(randoma); PublicA = BigInteger.ModPow(g, a, N); var PublicABytes = PublicA.ToByteArray(); UDPTransmitter transmitter = UDPTransmitter.CreateObject(); transmitter.WriteUint16((UInt16)CMSG_AUTH_LOGON_CHALLENGE); //opcode transmitter.WriteUint16((UInt16)(9 + USERNAME.Length + PublicABytes.Length)); //packet_length transmitter.WriteUint8(BUILD_MAJOR); transmitter.WriteUint8(BUILD_MINOR); transmitter.WriteUint8(BUILD_REVISION); transmitter.WriteInt16(CLIENT_BUILD); transmitter.WriteUint16((UInt16)USERNAME.Length); transmitter.WriteFixedString(USERNAME); transmitter.WriteUint16((UInt16)PublicABytes.Length); transmitter.WriteFixedBlob(PublicABytes); transmitter.SendTo(loginSocket, loginEndpoint); }
public void Close() { if (udpTransmitter != null) { udpTransmitter.Close(); udpTransmitter = null; } }
public void Connect() { if (udpTransmitter != null) { Close(); } udpTransmitter = new UDPTransmitter(IPAddress, Port); udpTransmitter.Connect(); }
public void Connect() { if (udpTransmitter != null) { Close(); } udpTransmitter = new UDPTransmitter(ipAddress, port); udpTransmitter.Connect(); fseq = 0; }
private static void OnRealmList(Session session, UDPReceiver data) { var sessionData = (ClientInfo)session.Data; Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] CMD_REALM_LIST", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port); int packetLen = 0; DataTable result = new DataTable(); //Retrieve the Account ID MySqlCommand cmd = new MySqlCommand(String.Format("SELECT id FROM account WHERE username = '******'", sessionData.Account), Program.db); int accountId = (int)cmd.ExecuteScalar(); Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Listing all realms", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port); Program.MySqlToDataTable(String.Format("SELECT * FROM realm"), Program.db, result); foreach (DataRow row in result.Rows) { packetLen = packetLen + ((string)row["address"]).Length + ((string)row["name"]).Length + 1 + ((int)row["port"]).ToString("0").Length + 14; } var ds = UDPTransmitter.CreateObject(); ds.WriteUint16((byte)SMSG_REALMLIST_RESPONSE); using (Aes aes = new AesManaged()) { using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(sessionData.SessionKey, sessionData.Salt.ToByteArray().Take(16).ToArray()), CryptoStreamMode.Write)) { cs.WriteByte((byte)result.Rows.Count); foreach (DataRow host in result.Rows) { cs.WriteByte((byte)((int)host["type"])); cs.WriteByte((byte)((int)host["state"])); cs.WriteByte((byte)((int)host["realmflags"])); byte[] realmName = Encoding.UTF8.GetBytes((string)host["name"]); cs.Write(realmName, 0, realmName.Length); cs.WriteByte((byte)0); byte[] realmAddress = Encoding.UTF8.GetBytes((string)host["address"] + ":" + host["port"].ToString()); cs.Write(realmAddress, 0, realmAddress.Length); cs.WriteByte((byte)0); } } var messageBody = ms.ToArray(); ds.WriteUint16((UInt16)messageBody.Length); ds.WriteFixedBlob(messageBody); } } ds.SendTo(data.ReceiveSocket, session.RemoteEndPoint); }
private static void OnLogonChallengeOK(Session session, UDPReceiver data) { Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] CMD_LOGON_CHALLENGE", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port); UInt16 packet_size = data.ReadUint16(); UInt16 B_bytes_length = data.ReadUint16(); byte[] B_bytes = new byte[B_bytes_length]; PublicB = new BigInteger(data.ReadFixedBlob(ref B_bytes, B_bytes_length)); UInt16 S_bytes_length = data.ReadUint16(); byte[] S_bytes = new byte[S_bytes_length]; Salt = new BigInteger(data.ReadFixedBlob(ref S_bytes, S_bytes_length)); SHA256Managed sha = new SHA256Managed(); var u = new BigInteger(sha.ComputeHash(PublicA.ToByteArray().Concat(PublicB.ToByteArray()).ToArray()).Concat(new byte[] { 0 }).ToArray()); byte[] passwordHash = sha.ComputeHash(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", USERNAME, PASSWORD.ToUpper()))); var x = new BigInteger(sha.ComputeHash(passwordHash.Concat(Salt.ToByteArray()).ToArray()).Concat(new byte[] { 0 }).ToArray()); var S = BigInteger.ModPow(PublicB - k * BigInteger.ModPow(g, x, N), (a + u * x), N); if (S < 0) { S = S + N; //C# incorrectly calculates the mod of negative numbers } var sessionkey = sha.ComputeHash(S.ToByteArray()); var M1 = sha.ComputeHash(PublicA.ToByteArray().Concat(PublicB.ToByteArray()).Concat(sessionkey).ToArray()); using (MemoryStream ms = new MemoryStream()) { using (BinaryWriter bw = new BinaryWriter(ms)) { bw.Write(M1, 0, M1.Length); } byte[] messageBody; messageBody = ms.ToArray(); using (MemoryStream ms1 = new MemoryStream()) { UDPTransmitter transmitter = UDPTransmitter.CreateObject(); transmitter.WriteUint16(CMSG_AUTH_LOGON_PROOF); transmitter.WriteUint16((UInt16)messageBody.Length); transmitter.WriteFixedBlob(messageBody); transmitter.SendTo(loginSocket, loginEndpoint); } } }
public bool Connect() { if (udpTransmitter != null) { Close(); } //udpTransmitter = new UDPTransmitter(IPAddress,Port); udpTransmitter = new UDPTransmitter(IPAddress, Port, transmissionType); try { udpTransmitter.Connect(); } catch (Exception e) { Debug.LogWarning("Could not create a valid UDP Transmitter: " + e.Message); udpTransmitter = null; return(false); } return(true); }
// Construct a transmitter to send hololens input. private Transmitter(int port) { // Create and start the transorm #if UNITY_EDITOR _transmitter = new UDPTransmitter("127.0.0.1", port); #else _transmitter = new UDPTransmitter(Cluster.masterNode.address, port); #endif _transmitter.Connect(); if (_transmitterX == null) { #if UNITY_EDITOR _transmitterX = new UDPTransmitter("127.0.0.1", 6667); // TODO: only have one transmitter #else _transmitterX = new UDPTransmitter(Cluster.masterNode.address, 6667); // TODO: only have one transmitter #endif _transmitterX.Connect(); } }
void Start() { Debug.Log("Starting up"); // Initialize OSC clients (transmitters) if (oscMode == OscMode.SEND || oscMode == OscMode.SEND_RECEIVE) { udpTransmitter = new UDPTransmitter(outIP, outPort); udpTransmitter.Connect(); } if (oscMode == OscMode.RECEIVE || oscMode == OscMode.SEND_RECEIVE) { Debug.Log("Setup receiving"); udpReceiver = new UDPReceiver(inPort, false); udpReceiver.MessageReceived += receivedOSC; udpReceiver.Start(); Debug.Log("Finished setting up receiving"); } }
private static void OnLogonProof(Session session, UDPReceiver data) { var sessionData = (ClientInfo)session.Data; Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] CMD_AUTH_LOGON_PROOF", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port); BigInteger ClientM1; var M1len = data.ReadInt16(); var M1data = new byte[M1len]; using (MemoryStream ms = new MemoryStream(data.Buffer, data.CurrentReadPos, data.RemainingBytes)) { using (BinaryReader br = new BinaryReader(ms)) { br.Read(M1data, 0, M1len); ClientM1 = new BigInteger(M1data.Concat(new byte[] { 0 }).ToArray()); } } if (ClientM1 == sessionData.M1) { var ds = UDPTransmitter.CreateObject(); ds.WriteUint16((UInt16)SMSG_AUTH_LOGON_PROOF_OK); ds.SendTo(data.ReceiveSocket, session.RemoteEndPoint); MySqlCommand cmd = new MySqlCommand(String.Format("UPDATE account SET sessionkey = '{1}', last_ip='{2}', last_login='******' WHERE username = '******'", sessionData.Account, Convert.ToBase64String(sessionData.SessionKey), session.RemoteEndPoint.Address, DateTime.Now.ToString("yyyy-MM-dd")), Program.db); cmd.ExecuteNonQuery(); Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Auth success for user {3}. [session key = {4}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account, Convert.ToBase64String(sessionData.SessionKey)); } else { //Wrong pass Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Wrong password for user {3}.", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account); var ds = UDPTransmitter.CreateObject(); ds.WriteUint16((UInt16)SMSG_AUTH_LOGON_PROOF_FAIL); ds.WriteUint8((byte)AccountState.LOGIN_UNKNOWN_ACCOUNT); ds.SendTo(data.ReceiveSocket, session.RemoteEndPoint); } }
public void Close() { udpTransmitter.Close(); udpTransmitter = null; }
public OSCScript(string ip, int port) { oscTransmitter = setOSCTarget(ip, port); oscTransmitter.Connect(); }
// Create the transmitter object private static void CreateTransmitter() { // Create and start the transmitter _transmitter = new UDPTransmitter("10.160.98.129" /*ClusterConfig.current.master.address*/, 6668 /*SWAConfig.current.holoPort*/); _transmitter.Connect(); }
// Create the transmitter object private void CreateTransmitter() { // Create and start the transmitter _transmitter = new UDPTransmitter("192.168.0.100"/*Cluster.masterNode.address*/, SWAConfig.current.holoPort); _transmitter.Connect(); }
private void Awake() { _UdpReceiver = GetComponent <UDPReceiver>(); _UdpReceiver.SetObserver(this); _Udpransmitter = GetComponent <UDPTransmitter>(); }
// Use this for initialization public void Init() { address = string.Format("/{0}", device); transmitter = new UDPTransmitter(ip, port); transmitter.Connect(); }
private static void OnLogonChallenge(Session session, UDPReceiver data) { var sessionData = (ClientInfo)session.Data; Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] CMD_LOGON_CHALLENGE", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port); UInt16 packet_size = data.ReadUint16(); int bMajor = data.ReadUint8(); int bMinor = data.ReadUint8(); int bRevision = data.ReadUint8(); int ClientBuild = data.ReadInt16(); UInt16 usernameLen = data.ReadUint16(); sessionData.Account = data.ReadFixedString(usernameLen); UInt16 publicALen = data.ReadUint16(); byte[] publicABytes = new byte[publicALen]; sessionData.PublicA = new BigInteger(data.ReadFixedBlob(ref publicABytes, publicALen)); AccountState acc_state = AccountState.LOGIN_DBBUSY; string PassString = string.Empty; Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] CMD_AUTH_LOGON_CHALLENGE [{3}], Client Version [{4}.{5}.{6}.{7}].", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account, bMajor, bMinor, bRevision, ClientBuild); if ((ClientBuild >= REQUIRED_BUILD_LOW) && (ClientBuild <= REQUIRED_BUILD_HIGH)) { try { MySqlCommand cmd = new MySqlCommand(string.Format("SELECT * FROM account WHERE username = '******'", sessionData.Account), Program.db); using (MySqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { if ((int)reader["banned"] == 1) { acc_state = AccountState.LOGIN_BANNED; } else { acc_state = AccountState.LOGIN_OK; PassString = (string)reader["passwordHash"]; sessionData.Verifier = BigInteger.Parse((string)reader["verifier"]); sessionData.Salt = BigInteger.Parse((string)reader["salt"]); sessionData.Access = (AccessLevel)reader["accesslevel"]; } } else { acc_state = AccountState.LOGIN_UNKNOWN_ACCOUNT; } } } catch (Exception ex) { Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Data Error [{3}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, ex.ToString()); acc_state = AccountState.LOGIN_DBBUSY; } switch (acc_state) { case AccountState.LOGIN_OK: Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Account found [{3}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account); byte[] account = Encoding.UTF8.GetBytes(sessionData.Account); byte[] passwordHash = Convert.FromBase64String(PassString); var random = new RNGCryptoServiceProvider(); var randomb = new byte[20]; random.GetBytes(randomb); randomb[randomb.Length - 1] &= 0x7F; var b = new BigInteger(randomb); sessionData.PublicB = ((sessionData.k * sessionData.Verifier) + BigInteger.ModPow(sessionData.g, b, sessionData.N)) % sessionData.N; SHA256Managed sha = new SHA256Managed(); var u = new BigInteger(sha.ComputeHash(sessionData.PublicA.ToByteArray().Concat(sessionData.PublicB.ToByteArray()).ToArray()).Concat(new byte[] { 0 }).ToArray()); var S = BigInteger.ModPow((sessionData.PublicA * BigInteger.ModPow(sessionData.Verifier, u, sessionData.N)), b, sessionData.N); sessionData.SessionKey = sha.ComputeHash(S.ToByteArray()); sessionData.M1 = new BigInteger(sha.ComputeHash(sessionData.PublicA.ToByteArray().Concat(sessionData.PublicB.ToByteArray()).Concat(sessionData.SessionKey).ToArray()).Concat(new byte[] { 0 }).ToArray()); var dsOK = UDPTransmitter.CreateObject(); dsOK.WriteUint16((UInt16)SMSG_AUTH_LOGON_CHALLENGE_OK); byte[] B_bytes = sessionData.PublicB.ToByteArray(); byte[] S_bytes = sessionData.Salt.ToByteArray(); dsOK.WriteUint16((UInt16)(4 + B_bytes.Length + S_bytes.Length)); //packet_length dsOK.WriteUint16((UInt16)B_bytes.Length); dsOK.WriteFixedBlob(B_bytes); dsOK.WriteUint16((UInt16)S_bytes.Length); dsOK.WriteFixedBlob(S_bytes); dsOK.SendTo(data.ReceiveSocket, session.RemoteEndPoint); return; case AccountState.LOGIN_UNKNOWN_ACCOUNT: Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Account not found [{3}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account); break; case AccountState.LOGIN_BANNED: Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Account banned [{3}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account); break; case AccountState.LOGIN_NOTIME: Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Account prepaid time used [{3}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account); break; case AccountState.LOGIN_ALREADYONLINE: Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Account already logged in the game [{3}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account); break; default: Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] Account error [{3}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, sessionData.Account); break; } var ds = UDPTransmitter.CreateObject(); ds.WriteUint16((UInt16)SMSG_AUTH_LOGON_CHALLENGE_FAIL); ds.WriteUint8((byte)acc_state); ds.SendTo(data.ReceiveSocket, session.RemoteEndPoint); } else { Console.WriteLine("[{0:yyyy-MM-dd HH\\:mm\\:ss}] [{1}:{2}] WRONG_VERSION [{3}.{4}.{5}.{6}]", DateTime.Now, session.RemoteEndPoint.Address, session.RemoteEndPoint.Port, bMajor, bMinor, bRevision, ClientBuild); var ds = UDPTransmitter.CreateObject(); ds.WriteUint16((UInt16)SMSG_AUTH_LOGON_CHALLENGE_FAIL); ds.WriteUint8((byte)AccountState.LOGIN_BADVERSION); ds.SendTo(data.ReceiveSocket, session.RemoteEndPoint); } }
public OSCScript() { oscTransmitter = setOSCTarget("192.168.0.111", 6666); oscTransmitter.Connect(); }