Avatar billede balousen Nybegynder
21. oktober 2010 - 11:35 Der er 8 kommentarer

Hjælp til C# tool LAN Porte

Hejsa

Jeg har lavet en GUI som indeholder flg felter:

txtbox: IP (txtip)
txtbox: Port(txtport)

checkbox: tcp (chktcp)
checkbox: udp (chkudp)

Knap: GO (btngo)

Det jeg har brug for er hjælp til at opfange den ip adr der er indtastet samt port nummer. Derefter skal den finde ud af hvilke check boxe der er aktiveret, og forespørge ud mod porten om den er lukket eller åben, og vise en checkbox med resultatet.

Jeg er ret ny til C# så any help er værdsat !
Avatar billede j3ppah Novice
21. oktober 2010 - 11:51 #1
Well det første er ganske simpelt... men det ville være lidt håbløst at begynde at gemme det i en variabel før du benytter det, da du allerede har det i txtboxene...

men nu viser jeg lige hvordan du gemmer det i en variabel, så har du nok en ide om hvordan du benytter den uden at gemme den først.

String ip = txtip.Text;
String port = txport.Text;
String TcpUdp;

If (chktcp = true)
{
String TcpUdp = "Tcp";
}
If (chkudp = true)
{
String TcpUdp = "Udp";
}

Men hvordan du vil checke op på om den er åben ved jeg ikke... der er flere muligheder, men det kræver jo lidt du har noget du kan "skyde mod"...
Du kan jo vælge at bruge cmd'en til det (fra din app så det ikke kan ses self.)

Dette kan evt gøres noget lignende følgende: (Noget kode jeg skrev en gang)

            string a = txt_IP.Text;
            string b = txt_User.Text;
            string c = txt_Password.Text;
            string Command = "cd "+_iniReader.Pstools+" && p: && psservice "+@"\\"+a+" " + " -u " + b + " -p " + c + " restart PCC";
            Process p = new Process();
            try
            {
                p.StartInfo = new ProcessStartInfo("cmd", "/c \"" + Command + "")
                    {

                        RedirectStandardOutput = true,

                        UseShellExecute = false,

                        CreateNoWindow = true

                    };

                p.Start();
                MessageBox.Show(Command);

                string output = p.StandardOutput.ReadToEnd();
                p.WaitForExit();
                if (output.Contains("START_PENDING"))
                {
                    RestartPCC_State = "Done...";
                }
                else
                {
                    RestartPCC_State = "Failed...";
                }


Den brugte pstools, men det kan du jo bare lade være med. (Den checker ikke på port nummer eller noget, den blev brugt til at restarte en service.)

Men du kan jo bruge cmd'en til at checke om du kan tilgå en givet modtager  på en specifik port...

Håber det hjalp, ellers er du velkommen til at spørge igen.
Avatar billede j3ppah Novice
21. oktober 2010 - 11:56 #2
hov.. rookie mistake... det hedder selvfølgelig

            if (chktcp.Checked)
            {
String TcpUdp = "Tcp";
            }

i stedet for

If (chktcp = true)
{
String TcpUdp = "Tcp";
}
Avatar billede balousen Nybegynder
21. oktober 2010 - 15:10 #3
det med variabel delen er jeg med på :)

men det andet fatter jeg ikke... jeg kan ikke helt associere det til at tjekke en  port, som skrevet er jeg nybegynder.
Avatar billede j3ppah Novice
21. oktober 2010 - 15:28 #4
jamen:
1. Du skal have noget du kan checke op imod... (Router, server, pc) et eller andet. som du ønsker at tilgå på porten. (Har du det?)
2. brug
//bygger din kommando
String command = "telnet "+txtboxip.Text+" "+txtboxport.Text
//string til at holde om det virkede eller ej
//kan også være en boolean
String Virkerder;

Process p = new Process();
            try
            {
//Starter cmd'en og affyre din kommando
                p.StartInfo = new ProcessStartInfo("cmd", "/c \"" + Command + "")
                    {

                        RedirectStandardOutput = true,

                        UseShellExecute = false,

                        CreateNoWindow = true

                    };

                p.Start();
                MessageBox.Show(Command);
//viser hvilken kommando der bliver fyret af

                string output = p.StandardOutput.ReadToEnd();
                p.WaitForExit();
                if (output.Contains("Der kunne ikke oprettes forbindelse"))
                {
                    Virkerdet = "nej"
                }
                else
                {
                    Virkerdet = "ja"
                }



Noget i den stil... Ved dog ikke om jeg ville bruge telnet til at checke om porten var åben... og i såfald ved jeg burde du:
1. lave det i en seperat tråd.
2. huske at lukke tråden.
Avatar billede martinbk Nybegynder
21. oktober 2010 - 21:49 #5
det var dog meget omstændigt at bruge windows' telnet client (som i øvrigt slet ikke er installeret som standard i Windows 7)

hva med i stedet noget ganske simpelt så som flg.?

string hostname = "localhost";
int portno = 9081;
IPAddress ipa = (IPAddress) Dns.GetHostAddresses(hostname)[0];


try
{
    Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    sock.Connect(ipa, portno);
    if (sock.Connected == true)  // Porten er åben
            MessageBox.Show("Port is Open");
    sock.Close();

}
catch (SocketException ex)
{
    if (ex.ErrorCode == 10061)  // Porten ikke i brug
        MessageBox.Show("Port is Closed!");
    else
        MessageBox.Show(ex.Message);
}


så kan du self. blot ændre ProtoclType til Udp hvis du vil checke via UDP
Avatar billede j3ppah Novice
22. oktober 2010 - 08:27 #6
Ja, giver dig ret i at cmd'en nok ikke ligefrem er det smarteste at bruge, men nu har jeg kun rodet lidt med cocket programmering.. (lavede en lille chat client en gang). Og gad ikke lige til at slå det op igen ;)...

Men helt klart, socket ville være langt bedre, da du slipept for at hive 3 parts app's ind...

PS. Telnet klienten er installeret på alle nørders win 7 ;)! Er da det første man gør når man får den kørt op.

PPS. håber du har fået noget ud af det balousen, ellers må du jo bare spørge løs, hvis du savner nogle forklaringer.
Avatar billede balousen Nybegynder
26. oktober 2010 - 10:36 #7
undskyld mit sene svar, jeg har været nede med influenza...

Det jeg har brug for hjælp til er hvordan det skal org. er der en af jer der har mod på at lave et sample projekt ?
Avatar billede j3ppah Novice
01. november 2010 - 08:51 #8
forstår ikke helt hvad du mener, martinbk's kode er jo lige til at sætte ind i dit program. du skal bare lige skifte nogle af tingene ud, så den laver check på om det er TCP eller UDP osv. og hvilken port... det laver du jo bare i nogle variabler du bruger i hans kode.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester