private void Connect() { if (_Socket != null) { _Socket.Close(); Trace2(_uin + "disc:" + _oldConnectionStatus); } _NetworkStream = new MemoryStream(); TcpClient _TcpClient = new TcpClient(servers.Pop(), 5190); _Socket = _TcpClient.Client; _NetworkStream = new NetworkStream(_Socket); new Flap { _ICQ = this }.Receive(); // receive hello Flap _Flap2 = new Flap { _ICQ = this }; _Flap2.ch = 1; _Flap2._data.Write(new byte[] { 0, 0, 0, 1 }); _Flap2._Tvls.Add(new Tvl { type = 1, data = _uin.ToBytes() }); _Flap2._Tvls.Add(new Tvl { type = 2, data = XOR(_passw) }); _Flap2._Tvls.Add(new Tvl { type = 3, data = "chatbot".ToBytes() }); _Flap2.WriteTvl(); _Flap2.Send(@"00 16 00 02 01 0A 00 17 00 02 00 05 00 18 00 02 00 25 00 19 00 02 00 01 00 1A 00 02 0E 90 00 14 00 04 00 00 00 55 00 0F 00 02 65 6E 00 0E 00 02 75 73".Hex()); Flap _Flap = new Flap { _ICQ = this }.Receive().ReadTvl(); //1 uin //2 ip 3 cookie Match m = Regex.Match(_Flap._Tvls[2].data.ToStr(), @"(.+?):(\d+)"); if (!m.Success) { throw new ExceptionB("cannot Connect"); } ip = m.Groups[1].Value; port = int.Parse(m.Groups[2].Value); _Cookie = _Flap._Tvls[3].data; _Socket.Close(); BossSimple(); }
public void BossSimple() { TcpClient _TcpClient = new TcpClient(ip, port); _Socket = _TcpClient.Client; _NetworkStream = new NetworkStream(_Socket); Flap hello = new Flap { _ICQ = this }.Receive(); //receive hello Flap _Flap1 = new Flap { _ICQ = this, ch = 1 }; _Flap1._data.Write(new byte[] { 0, 0, 0, 1 }); _Flap1._Tvls.Add(new Tvl { data = _Cookie, type = 6 }); _Flap1.WriteTvl().Send(); Flap _Flap2 = new Flap { _ICQ = this }.Receive().ReadSnac(); Flap _Flap3 = new Flap { _ICQ = this }; _Flap3.ch = 2; _Flap3._Snac.ID1 = 1; _Flap3._Snac.ID2 = 2; _Flap3._Snac.flag1 = _Flap3._Snac.flag2 = 0; _Flap3.WriteSnac();//.Write(); while (_Flap2._data.Position != _Flap2._data.Length) { UInt16 a = _Flap2._data.ReadUInt16(); _Flap3._data.WriteUint16(a); _Flap3._data.Write("00 01 01 10 04 7B".Hex()); } _Flap3.Send(); Flap _Flap4 = new Flap { _ICQ = this }; _Flap4.Receive().ReadSnac(); if (_Flap4._Snac.ID1 != 11 || _Flap4._Snac.ID2 != 2) { throw new Exception(); } Thread.Sleep(1000); }
public void SendMessage(Im im) { try { if (_ConnectionStatus != ConnectionStatus.Connected) { throw new Exception("Not Connected"); } Flap _Flap = new Flap { _ICQ = this }; _Flap.ch = 2; _Flap._Snac.ID1 = 4; _Flap._Snac.ID2 = 6; _Flap.WriteSnac(); _Dictionary.Add(_Flap._Snac.req, im); _Flap._data.Write("00 00 00 00 00 00 00 00 00 01".Hex()); byte[] sendto = ASCIIEncoding.ASCII.GetBytes(im.uin); _Flap._data.WriteByte((byte)sendto.Length); _Flap._data.Write(sendto); _Flap._data.Write(new byte[] { 0, 6, 0, 0 }); Tvl _Tvl02 = new Tvl() { data = new byte[] { 05, 01, 00, 02, 01, 01 }, type = 2 }; Tvl _Tvl0101 = new Tvl() { type = 257, data = ("\0\0\0\0" + im.msg).ToBytes() }; _Tvl02.data = _Tvl02.data.Join(_Tvl0101.ToBytes()); _Flap._Tvls.Add(_Tvl02); _Flap.WriteTvl().Send(); im.Status = MessageStatus.Sending; im._DateTime = DateTime.Now; } catch (IOException) { Trace2(_uin + "Error msg send failed"); } }
public void BossAdv() { TcpClient _TcpClient = new TcpClient(ip, port); _Socket = _TcpClient.Client; _NetworkStream = new NetworkStream(_Socket); Flap hello = new Flap { _ICQ = this }.Receive(); //receive hello Flap _Flap1 = new Flap { _ICQ = this, ch = 1 }; // отправляем куки _Flap1._data.Write(new byte[] { 0, 0, 0, 1 }); _Flap1._Tvls.Add(new Tvl { data = _Cookie, type = 6 }); _Flap1.WriteTvl().Send(); Flap _Flap2 = new Flap { _ICQ = this }.Receive().ReadSnac(); // SRV_FAMILIES new Flap { _ICQ = this, ch = 2 }.Send(@"00 01-00 17 00 00 00 00 00 00 00 01 00 03 00 13 00 02-00 02 00 01 00 03 00 01 00 15 00 01 00 04 00 01-00 06 00 01 00 09 00 01 00 0A 00 01 00 0B 00 01-".Hex()); // CLI_FAMILIES Flap _Flap4 = new Flap { _ICQ = this }.Receive(); // SRV_FAMILIES2 Flap _Flap5 = new Flap { _ICQ = this }.Receive(); // SRV_MOTD new Flap() { _ICQ = this, ch = 2 }.Send("00 01-00 06 00 00 00 00 00 00".Hex()); // CLI_RATESREQUEST Flap _Flap6 = new Flap() { _ICQ = this }.Receive(); // SRV_RATES new Flap() { _ICQ = this, ch = 2 }.Send("00 01-00 08 00 00 00 00 00 00 00 01 00 02 00 03 00 04-00 05".Hex()); // CLI_ACKRATES (ответим серверу что мы получили его SRV_RATES) new Flap() { _ICQ = this, ch = 2 }.Send("00 04-00 02 00 00 00 00 00 00 00 00 00 00 00 03 1F 40-03 E7 03 E7 00 00 00 00".Hex()); // CLI_SETICBM new Flap() { _ICQ = this, ch = 2 }.Send("00 01-00 0E 00 00 00 00 00 00".Hex()); // CLI_REQINFO new Flap() { _ICQ = this, ch = 2 }.Send("00 02-00 02 00 00 00 00 00 00".Hex()); // CLI_REQLOCATION new Flap() { _ICQ = this, ch = 2 }.Send("00 03-00 02 00 00 00 00 00 00".Hex()); // CLI_REQBUDDY new Flap() { _ICQ = this, ch = 2 }.Send("00 04-00 04 00 00 00 00 00 00".Hex()); // CLI_REQICBM new Flap() { _ICQ = this, ch = 2 }.Send("00 09-00 02 00 00 00 00 00 00".Hex()); // CLI_REQBOS Flap _Flap7 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYINFO Flap _Flap8 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYLOCATION Flap _Flap9 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYBUDDY Flap _Flap10 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYICBM Flap _Flap11 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYBOS new Flap() { _ICQ = this }.Send(@"00 02-00 04 00 00 00 00 00 00 00 05 00 10 09 46 13 41-4C 7F 11 D1 82 22 44 45 53 54 00 00".Hex());// CLI_SETUSERINFO - капабилды клиента (в TLV5) new Flap { _ICQ = this, ch = 2 }.Send("00 09-00 07 00 00 00 00 00 00".Hex()); // CLI_ADDINVISIBLE new Flap { _ICQ = this, ch = 2 }.Send("00 01-00 11 00 00 00 00 00 00 00 00 00 00".Hex()); //SNAC(1,11)(зх шоза снэк) new Flap { _ICQ = this, ch = 2 }.Send(@"00 01 00 1E 00 00 00 00 00 00 00 06 00 04-00 00 00 00 00 08 00 02 00 00 00 0C 00 25 59 BD-9B DD 00 00 0B B8 04 00 08 2D A8 4E 56 00 00 00-50 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00-00 00 00".Hex());// CLI_REQINFO new Flap { _ICQ = this, ch = 2 }.Send(@"00 01 00 02 00 00 00-00 00 00 00 01 00 03 01 10 04 7B 00 13 00 02 01-10 04 7B 00 02 00 01 01 01 04 7B 00 03 00 01 01-10 04 7B 00 15 00 01 01 10 04 7B 00 04 00 01 01-10 04 7B 00 06 00 01 01 10 04 7B 00 09 00 01 01-10 04 7B 00 0A 00 01 01 10 04 7B 00 0B 00 01 01-10 04 7B".Hex());//CLI_READY Flap _Flap12 = new Flap { _ICQ = this }.Receive(); // Как видим, тут у нас есть SNAC B,2 (00 0B 00 02) - следовательно мы успешно зашли =) }