Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
sdk:telnet-run-a-command-using-telnet [2015/03/02 10:22] – created fachetsdk:telnet-run-a-command-using-telnet [2015/05/06 12:50] (current) – external edit 127.0.0.1
Line 1: Line 1:
-<code c>+====== Run a command using Telnet ====== 
 +<code c telnetcmd.are>
  
 /* DESC: This script runs a shell command using telnet. /* DESC: This script runs a shell command using telnet.
Line 10: Line 11:
 string telnet(ip, port, user, password, cmd) string telnet(ip, port, user, password, cmd)
 { {
- +  if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) return NULL; 
- if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) return NULL; +  if (connect(sock, ip, port) < 0) return NULL; 
- if (connect(sock, ip, port) < 0) return NULL; +  try { 
- try { +    if ((buf = recv(sock)) == NULL || strlen(buf) < 3) throw NULL; 
- if ((buf = recv(sock)) == NULL || strlen(buf) < 3) throw NULL; +    buf = explode(buf); 
- buf = explode(buf); +    if (buf[0] == "\xff") // is command 
- if (buf[0] == "\xff") // is command +    
- +      if (buf[1] == "\xfd" && buf[2] == "\d031") { //negotiate 
- if (buf[1] == "\xfd" && buf[2] == "\d031") { //negotiate +        if (send(sock, "\d255\d251\d031") == -1) throw NULL; 
- if (send(sock, "\d255\d251\d031") == -1) throw NULL; +        if (send(sock, "\d255\d250\d031\d000\d080\d000\d024\d255\d240") == -1) throw NULL; 
- if (send(sock, "\d255\d250\d031\d000\d080\d000\d024\d255\d240") == -1) throw NULL; +      } else { 
- } else { +        for (i = 0; i < strlen(buf); i++) 
- for (i = 0; i < strlen(buf); i++) +          if (buf[i] == "\xfd") buf[i] = "\xfc"; 
- if (buf[i] == "\xfd") buf[i] = "\xfc"; +          else if (buf[i] == "\xfb") buf[i] = "\xfd"; 
- else if (buf[i] == "\xfb") buf[i] = "\xfd"; +          if (send(sock, implode(buf)) == -1) throw NULL; 
- if (send(sock, implode(buf)) == -1) throw NULL; +          
- +    
- +    if ((buf = recv(sock)) == NULL || strlen(buf) < 1) throw NULL; // user ? 
- if ((buf = recv(sock)) == NULL || strlen(buf) < 1) throw NULL; // user ? +    if (send(sock, strcat(user, "\r\n")) == -1) throw NULL; 
- if (send(sock, strcat(user, "\r\n")) == -1) throw NULL; +    if ((buf = recv(sock)) == NULL || strlen(buf) < 1)throw NULL; // password ? 
- if ((buf = recv(sock)) == NULL || strlen(buf) < 1)throw NULL; // password ? +    if (send(sock, strcat(password, "\r\n")) == -1) throw NULL; 
- if (send(sock, strcat(password, "\r\n")) == -1) throw NULL; +    while((s = select(sock, 1)) > 0 && (buf = recv(sock)) != NULL && strlen(buf) > 0) 
- while((s = select(sock, 1)) > 0 && (buf = recv(sock)) != NULL && strlen(buf) > 0) +      if (s == -1) throw NULL; //ignore all garbage 
- if (s == -1) throw NULL; //ignore all garbage +      if (send(sock, strcat(cmd, "\r\n")) == -1) throw NULL;  //send command 
- if (send(sock, strcat(cmd, "\r\n")) == -1) throw NULL;  //send command +      rbuf =""; 
- rbuf =""; +    while((s = select(sock, 1)) > 0 && (buf = recv(sock)) != NULL && strlen(buf) > 0){ 
- while((s = select(sock, 1)) > 0 && (buf = recv(sock)) != NULL && strlen(buf) > 0){ +      if (s == -1) throw NULL;  
- if (s == -1) throw NULL;  +      else rbuf = strcat(rbuf, buf); // collect return 
- else rbuf = strcat(rbuf, buf); // collect return +    
- +    rbuf = right(rbuf, strlen(rbuf) - strlen(cmd) - 2); //cut cmd 
- rbuf = right(rbuf, strlen(rbuf) - strlen(cmd) - 2); //cut cmd +    if (pos = strrchr(rbuf, "\r")) 
- if (pos = strrchr(rbuf, "\r")) +      rbuf = left(rbuf, pos); 
- rbuf = left(rbuf, pos); +    throw rbuf; 
- throw rbuf; +  } catch (ret) { 
- } catch (ret) { +    close (sock); 
- close (sock); +    return ret; 
- return ret; +  }
- }+
 } }