[C++] Jak dodać zmienną do system()


(Leito) #1

Witam serdecznie,

chciałem napisać pewien program co będzie otwierać putty z wcześniej zdefiniowanym adresem IP, lecz za żadne skarby nie działają zmienne w system().

Istnieje jakiś sposób, aby dało się wykonać to co chcę?

Dodatkowo, jak zrobić, aby wpisać komendy do putty z wcześniej zdefiniowanego formularza?

Tzn. podaje adres IP, wartość 1, wartość 2, następnie włącza się putty z podanym ip, wpisuję hasło, a następnie wykonuje w/w wartości?

No chyba, że łatwiej było by to zrobić w Delphi to się go poduczę, choć sprawa jest pilna :frowning:

Windows Xp Sp3, DevC++


(Kalin 93) #2

Jeśli masz już coś napisane to pomogę, jeśli pisać od podstaw to za pewną sumkę mogę napisać taki program :wink:


(Leito) #3

Raczej, chciałbym by tylko ktoś mnie nakierował, albo coś doradził...

-- Dodane 27.03.2009 (Pt) 15:23 --

Mam taki kod:

#include 


int main(int argc,char *argv[])

{

    int channel1, i;

    const char* result;

    ne7ssh *_ssh = new ne7ssh();



    _ssh->setOptions ("aes192-cbc", "hmac-md5");



    channel1 = _ssh->connectWithPassword ("192.168.1.103", "root", "alpine");

_ssh->send ("netstat -na\n", channel1)



    delete _ssh;

    return EXIT_SUCCESS;

}

jednak hasło muszę i tak ręcznie wprowadzać przez co plecenie netstat -na\n już sie nie wykonuje :frowning: jakaś pomoc?

Dodam, że łączę się z iPhone


(Jam1234) #4

Kompletny strzał. Zamiast LF ("\n") spróbuj pełnej sekwencji CR LF ("\r\n"). Pojęcia nie mam czy coś da, natomiast wiem, że w wielu przypadkach oczekiwane są dwa bajty zamiast jednego...


(Leito) #5

akurat to był tylko przykład polecenia, obojętnie co nie podam, czy to ls. Po prostu chyba przez to powtórne wpisanie hasła reszta jest ignorowana.


(Jam1234) #6

Nie znam tej biblioteki. Może trzeba badać co zwracają funkcje? Jak znam życie jakieś komunikaty o błędach można pewnie uzyskać...

Rzut oka na google i oto mamy (po pierwsze trzeba poczekać na terminal :))

// Initiate a connection.

        channel1 = _ssh-connectWithPassword ("remoteHost", 22, "remoteUsr", "password", true, 30);

        if (channel1 0)

        {

            const char *errmsg = _ssh-errors()-pop();

            if (errmsg == NULL)

                errmsg = "";

            printf ("Thread1. Connection failed with last error: %s\n\n", errmsg);

            continue;

        }


        // Wait for bash prompt, or die in 5 seconds.

        if (!_ssh-waitFor (channel1, " $", 5))

        {

            const char *errmsg = _ssh-errors()-pop(channel1);

            if (errmsg == NULL)

                errmsg = "";

            printf ("Failed while waiting for remote shell wiht last error: %s\n\n", errmsg);

            _ssh-close(channel1);

            continue;

        }


        // Send "ls" command.

        if (!_ssh-send ("ls -al\n", channel1))

        {

            const char *errmsg = _ssh-errors()-pop(channel1);

            if (errmsg == NULL)

                errmsg = "";

            printf ("Could not send the command. Last error: %s\n\n", errmsg);

            _ssh-close(channel1);

            continue;

        }

(Leito) #7

Ehh.. teraz odpaliłem poprzedni pik i biblioteka nie działa :frowning:

Dlaczego wcześniej dzialało, a teraz, że z includowanej biblitoeki plik /botan/bulid.h nie istenieje?

A może jest jakis innny sposób na ssh z telefonem, może inna biblioteka?