Olá pessoal do VOL!
Tive esta dúvida e estou postando aqui para ajudar os outros que tem a mesma.
Pois bem, para colocar comando do sistema em C é bem simples, basta inserir o comando
system().
Ex.: system("clear");
Com isso, quando compilar o nosso programa em C, o sistema vai limpar a tela, ou seja, a mesma coisa que o comando clear faz quando estamos no
Linux em modo texto.
Ok, até aí tudo bem! E se eu quero interagir o programa com o usuário e o usuário por exemplo quer dar um simples "nmap" em um determinado ip sem pôr a sintaxe: nmap -sS -sV. O que eu faço?
Se tentar por:
Ex.: system("nmap -sS -sV %s", ip);
Vai dar erro, pois o comando system não aceita variáveis. O que fazer? Aí que entra o comando
sprintf.
O comando sprintf funciona da seguinte maneira:
sprintf(var, "comando + variável", variavel);
system(var);
Sendo que:
- var = pode por qualquer nome, essa variável vai armazenar o "comando + variável" para depois passarmos para o system;
- comando + variável = ex.: nmap -sS -sV %s
- variavel = a variável que você quer que %s receba.
Para ficar mais fácil o entendimento, vou pôr um exemplo do script para nmap.
#include <stdio.h>
#include <stdlib.h>
main () {
char ip[16]; //variável que vai receber o ip do usuário
char var[100]; //variável que vai receber o comando+variável ip
printf("Entre com o número do ip: ");
scanf("%s",&ip); //var ip tem o valor digitado pelo usuário
sprintf(var, "nmap -sS -sV %s", ip); //var recebe valor com + var ip
system(var); //system recebe valor de var
return 0;
}
Tenho um script que desenvolvi para ajudar usuários que não sabem as sintaxes do nmap a fazer varreduras, segue o link:
É isso aí! Espero ter ajudado.
Quaisquer duvidas postem!
Abraços.
so mais uma dica dentro da sua dica =D
evite usar sprintf, pois essa função não oferece nenhuma maneira de tratar buffer overflows, no caso do exemplo, se o comando tiver mais que 99 caracteres (100 contando com o null terminating char) você não tem como saber exatamente o que vai acontecer.
use snprintf ou asprintf no lugar de sprintf!
abracos