Anonymní profil Kyry – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Anonymní profil Kyry – Programujte.comAnonymní profil Kyry – Programujte.com

 

Příspěvky odeslané z IP adresy 77.87.240.–

.NET › cizí input (bot)
29. 7. 2011   #145406

Tak vyřešeno :-) Javascript "injection"

private void Write(string text)
{
 webBrowser1.Navigate("javascript:KyryWrite('"+text+"');function KyryWrite(t){window.frames[3].document.getElementsByName('text')[0].value=t;window.frames[3].document.getElementsByName('mysub')[0].click();}");
}

.NET › Okno v Total Commanderu
27. 7. 2011   #145308

#1 hejnallukas
Nejspíš DataGridView. Na klasický strom souborů se dá také použít TreeView.  

.NET › Stahovani z CZshare pres Web…
27. 7. 2011   #145303

Každý z těch inputů pošleš jako POST v requestu na http://czshare.com/free.php. To poslední je captcha... takže jí asi budeš muset cracknout, nebo najít nějákou pravidelnost v jejím generování na czshare.... 

.NET › cizí input (bot)
27. 7. 2011   #145291

#6 RePRO
Rozhodně to neber tak, že mám všechny za blbce, doufám, že to z mého postu nevyznělo.
Jinak skype Kyry_Cz....   

.NET › Odpočítávání pomocí Labelu v…
27. 7. 2011   #145290

#7 djanosik
Ok beru to   

.NET › cizí input (bot)
27. 7. 2011   #145285

Jsou tu 2 (jednoduchá)řešení, jak jsi sám navrhoval:

1) Přímá komunikace s HTTP serverem

Předávání proměnných v komunikaci HTTP probíhá buď pře GET (url?get....) a nebo přes POST(v hlavičce http requestu).
Většina chatů funguje přes post. Pokud chceš udělat bota, podíváš se do html zdrojáku toho chatu. Bude tam nejspíš form s atributem action. To je url kam se odesílá příspěvek. Jako postada dáš ten text. V tom formu jsou inputy, mají name, to je název té POST proměnné, text toho inputu(value) je hodnota té proměné. Příklad pro porozumění:

<form action='odeslat.php' method='post'>
   <input type='text' name='text_prispevku' id='blablabla js blablalba'>
   <input type='submit' value='odeslat !'>
</form>

Podle tohoto tedy odešleš httprequest na odeslat.php 
POSTDATA="text_prispevku=text toho inputu";

Fóra ale kontrolují USER-AGENT(prohlížeč) a případně mají nějákou COOKIE|SESSION autentizaci.
Pokud je to veškerá ochrana, tak bys to po pár zkouklých tutoriálech na mohl zvládnout.
Jestli ale chat/fórum používá CAPTCHA kód, můžeš mít problém. Potom záleží jaký jsi programátor. Já jsem si udělal OCR, který mi crackne RE-CAPTCHU, ale psát tady jak, tak asi dostanu od adminů za uši.   
Budeme tedy předpokládat, že chceš udělat něco, co za tebe bude odepisovat na hloupé dotazy, ne reklamního spambota.

Pokud systém běží na javascriptu(ajaxu), šlo by to udělat přes XSS injekci, to je ale věc, kteru tu rozhodně učit nebudu.. :-)

2) Bot přes GUI


Zjistil by sis souřadnice inputu a tlačítka pro odeslání.
Pomocí Cursor.Position = new Point(x, y);
By sis nastavil pozici myši a kliknul (přes user32)
Přes sendkeys.send posla data do inputu a kliknul na odeslat.
Pokud tě tato možnost zaujala, můžu ti poslat kód jak kliknout myší přes user32.dll
Jestli jsem ti pomohl, klikni na bezvýznamné plusko   

 

.NET › Odpočítávání pomocí Labelu v…
27. 7. 2011   #145269

Něják se mi nelíbí ten váš přístup 'přečti tohle a jdi do hajzlu'  nejde ? ->'četl jsi to špatně' -  Nehci na tohle téma filosofovat, protože je trochu sporné, když všechny chyby opravíš, tak pak se nic nenauči... Každopádně řešení:.

Nelze přistupovat ke controlu (tlačítko, text apod) z jiného vlákna, než kde bylo vytvořeno.
Pokud to potřebuješ, musíš funkci, která udělá změnu zavolat přes stejné vlákno, kde byl control vytvořen pomocí takzvaného invoku. 

  private delegate void ChangeTextClosure(Control control, string text);
        private void ChangeText(Control control, string text)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new ChangeTextClosure(ChangeText), control, text);
                return;
            }
            control.Text = text;
        }

Kyry
.NET › Síťová komunikace pro více k…
27. 7. 2011   #145268

Tak jsem ti to napsal, není to žádný bussiness kód (nic jsi mi nedal   ), ale prasárna taky ne..
Chybí tam optimalizace pamětí (přes reference) ale CPU to skoro nežere. Zkoušel jsem a jedno vlákno utáhne 100 clientů v klidu.Kdybys něco... ehm.. přihodil, tak to klidně dodělám, ale takhle to pro mě nemá cenu :-). Tady máš kód:

/* MULTICLIENT TCP SERVER

 * -----------------------------------------------Copyright Kryštof 'Kyry' Hilar-----------------------------------------
                                                             (\_(\
                                                            (=' :') 
                                                            (,(")(")
 */

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace WindowsFormsApplication21
{
    class Server
    {
        TcpListener server;
        public List<Client> clients = new List<Client>();//Seznam vsech pripojenych clientu
        private List<ClientHandler> handlers = new List<ClientHandler>();//"Cisnici" pro clienty

        //Konstruktor - prijima port na kterem nasloucha a pocet "cisniku" - handleru
        public Server(int port,int handlercount)
        {
            this.server = new TcpListener(port);//Vytvori server
            CreateHandlers(handlercount);//Vytvori handlery
            new Thread(Start).Start();
        }

        #region Events
        //Pripojil se client, priradime ho k handleruj
        private void OnClientConnect(TcpClient tcpclient)
        {
            Client client = (new Client(tcpclient, clients.Count + 1));
            clients.Add(client);
            PickFreeHandler().AddClient(client);//Vybereme nejmene zatizeny handler
        }
        //Client nam utekl
        private void OnClientDisconnect(Client client)
        {
            if (clients.Contains(client))
                clients.Remove(client);
        }
        //Client name neco poslal
        private void OnClientMessage(Client client, string message)
        {
            System.Windows.Forms.MessageBox.Show(message);
        }
        #endregion

        //Vytvori handlery podle predem nadefinovaneho poctu
        private void CreateHandlers(int count)
        {
            for (int i = 0; i < count; i++)
            {
                ClientHandler handler = new ClientHandler();
                handler.OnClientMessage += new ClientHandler.ClientMessageHandler(OnClientMessage);
                handler.OnClientDisconnect += new ClientHandler.ClientDisconnectHandler(OnClientDisconnect);
                handlers.Add(handler);
            }
        }
        
        //Spusti sever
       private void Start()
        {
            server.Start();
            while (true)
            {   //Ceka na prichoziho clienta
                OnClientConnect(server.AcceptTcpClient());
            }
        }

         //Najde nejvhodnesi handler (s nejmeni clienty)
        private ClientHandler PickFreeHandler()
        {
             int min = int.MaxValue;
             ClientHandler freeHandler = null;
                 foreach (ClientHandler h in handlers)
                 {
                     if (h.ClientsCount < min)
                     {
                         freeHandler = h;
                         min = h.ClientsCount;
                     }
                 }
                 return freeHandler;
        }


        private class ClientHandler
        {
            public delegate void ClientMessageHandler(Client c, string data);
            public event ClientMessageHandler OnClientMessage;

            public delegate void ClientDisconnectHandler(Client c);
            public event ClientDisconnectHandler OnClientDisconnect;
            private List<Client> clients = new List<Client>();         

            //Vrati pocet obsluhovanych clientu
            public int ClientsCount { get { return clients.Count; } }

            
            //Handler dostal na starost noveho clienta
            public void AddClient(Client client)
            {
                clients.Add(client);
                Handle(client);
            }

            struct MessageEventArgs
            {
                public Client client;
                public string data;
            }
            private void CallMessageEvent(object arg)
            {
                MessageEventArgs args = (MessageEventArgs)arg;
                OnClientMessage(args.client, args.data);
            }


            //Prisly data od clienta 
            private void AsyncCallback(IAsyncResult ar)
            {
                Client client = ar.AsyncState as Client;               
                byte[] data = client.buffer;
                string message = ASCIIEncoding.ASCII.GetString(data);
                if (message != null && message.Trim() != "")
                {
                    MessageEventArgs args = new MessageEventArgs();
                    args.client = client;
                    args.data = message;
                    new Thread(new ParameterizedThreadStart(CallMessageEvent)).Start(args);
                }
                Handle(client);//Pripravime handler na dalsi data od tohoto clienta
            }
            private void Handle(Client c)
            {
                if (c == null || !c.connected)//Client nam utekl, uz ho tedy nebudeme obsluhovat
                {
                    clients.Remove(c);
                    OnClientDisconnect(c);
                    return;
                }
                try
                {
                    c.buffer = new byte[4096];
                    c.clientStream.BeginRead(c.buffer, 0, c.buffer.Length, new AsyncCallback(AsyncCallback), c);//Precteme data od clienta
                }
                catch 
                {
                    clients.Remove(c);
                    OnClientDisconnect(c); 
                }
            }            
        }

        public class Client 
        {
            private int _id;
            public int id {get { return _id; }}
            public bool connected { get { return tcpclient.Connected; }}
            private TcpClient tcpclient;
            public byte[] buffer = new byte[4096];
            public Stream clientStream;
            public StreamReader clientStreamReader;
            public Client(TcpClient _client,int clientid)
            {
                this._id = id;
                this.tcpclient = _client;
                this.clientStream = _client.GetStream();
                this.clientStreamReader = new StreamReader(clientStream);
            }
        
        }

    }
}

new Server(88, 5);//(port, pocet_vlaken - staci i jedno :-))
.NET › Help me please - C#
26. 7. 2011   #145195

Já mám rád codeproject a stackoverflow. Něco málo najdeš i na vbnet.cz. 

.NET › Rozdeleni nejakyho cisla ci…
26. 7. 2011   #145194

Jelikož nás naši drazí zaměstnavatelé neplatí za řádky, tak bych to lehce zkrouhnul   

string s = "10,1023,1012, 10|123";
foreach (Match m in new Regex(@"\d+").Matches(s))
            MessageBox.Show (m.Captures[0].Value);

.NET › instalační balíček
26. 7. 2011   #145192

Já používám Inno setup, docela šikovný program. Přes jakési scripty jde udělat i ověření .NETU a doinstalace na pozadí.
Jako nouzové řešení všechno narvat do exe jako embed resource a při prvním spuštění uložit na disk. 

MySQL › funkce s časem v mssql
26. 7. 2011   #145191

Já osobně bych se na časové funkce sql nespoléhal a použil timestamp. Po selectu potom přičetl v php, nebo asp, prostě na čem stránka  běží.

.NET › Zjisteni ID Buttonu na který…
26. 7. 2011   #145190

#1 Odin
Dobří ajťáci ti odpověděli ohledně aspx, pokud hledáš řešení pro winforms -  delegát event handler má parametr sender typu object.
Tudíž když přidáš do metody která obsluhuje událost click 
Button b = (Button)sender;
Tak můžeš použít b.Tag, nebo nějákou předem vyplněnou vlastnost...   

.NET › Binding - vstup doprostřed p…
25. 7. 2011   #145170

#1 Petrroll
Nevím, jestli jsem zcela pochopil problém, ale globální kontrola textboxů by mohla fungovat něják takto:

  private void InitHandler()
        {
            foreach (Control c in this.Controls)
            {
                if (c.GetType() != typeof(TextBox))
                    continue;
                ((TextBox)c).KeyDown += new KeyEventHandler(HandleTextBoxKey);
            }
        }
        private void HandleTextBoxKey(object source, KeyEventArgs e)
        {
            e.SuppressKeyPress = (!new Regex(@"\d+").IsMatch((Convert.ToChar(e.KeyValue)).ToString())) ? true : false; 
        }
.NET › chatování s počítačem
25. 7. 2011   #145167

Ze zvědavosti jsem si to decompiloval (čekal jsem keylogger, nebo tak, ale překvapil jsi   ). Program pěkný, ale s umělou inteligencí nemá zatím moc společného

this.odpoved = new string[] { "nerozum\x00edm ot\x00e1zce", "toto byla řečnick\x00e1 ot\x00e1zka?", "ano samozdřejmě ano", "ne opravdu ne", "Samozřejmě tohle nev\x00edm.", "Ty to nev\x00edš?", "Nechtěj zn\x00e1t pravdu.", "Proč to chceš vědět?", "Tahle ot\x00e1zka mě bude tr\x00e1pit ještě dlouho" };

 Ještě ti poradím.. Jestli toho budeš mít víc, použij třídy, teďka jsi vytvořil takzvaný godobject

.NET › Síťová komunikace pro více k…
25. 7. 2011   #145164

Máš naprostou pravdu. Samotné vytvoření vlákna trvá nějákou dobu a každé vlákno si v .NETU alokuje zhruba 1MB. Pokud máš přes 1000 vláken, systému zabere velkou část času CPU přepínání mezi vlákny a proces se stane nestabilní - přestanou fungovat timery apod. Stačí jedno řídící vlákno a třeba 10 execution threads. Jedno vlákno čeká na připojení clienta a každému vláknu přidělí podle vytížení. "Client" pak jednoduše zavolá nějáký event, který request zpracuje. Pokud by sis nevěděl rady, můžu ti napsat nějáký jednoduchý thread management pro TCP server...

Jinak do 500 clientů bych určitě tento problém neřešil.   

.NET › WebClient [Otazka]
25. 7. 2011   #145162

#1 Odin
Jak říkají, jde o připojení. Jinak třída WebClient v .NETu je sama o sobě pomalá. Doporučuji spíše použít HttpWebRequest a HttpWebResponse. 

 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("url");//.Create vrací WebRequest, nutno přetypovat
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (StreamReader sr = new StreamReader(response.GetResponseStream())
            { //Protoze garbage collector v .NETu neslape jak by měl, je lepší použít "automatický dispose"
             return sr.ReadToEnd();
            }

Pokud bude i tento způsob pomalý tak pře System.Net.Sockets použít TcpClienta a podle dokumentace HTTP protokolu se připojit na portu 80. Tvůj dotaz byl lehce zmatený, takže asi zdrojový kód nebude nutný.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý