Usando comandos do sistema em C

Publicado por Perfil removido em 11/06/2008

[ Hits: 23.822 ]

 


Usando comandos do sistema em C



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.

Outras dicas deste autor

JSTL - Problemas com tags

"Resetando" o mapa de teclado ABNT2 no X

O que fazer após instalar Elementary OS 0.4 Loki

Salvando jogos em flash para seu PC

Servidor DNS do google no linux

Leitura recomendada

Switch em C, e se a opção for inválida?

Função recursiva para inverter um vetor de caracteres

Exibindo código ASCII das teclas

getch() e getche() não funcionam no ANSI

Declaração de variáveis em C

  

Comentários
[1] Comentário enviado por gallois em 04/10/2008 - 22:55h

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

[2] Comentário enviado por adilima28 em 12/11/2009 - 22:02h

E como ficaria a mesma rotina com snprintf ou asprintf?

Um abraço.

[3] Comentário enviado por anderson1277 em 21/03/2010 - 13:38h

vlw cara muito bom essa dica!!!!!!!!!

[4] Comentário enviado por dedrano_RC em 06/06/2011 - 12:06h

Oi meu nome wander eu to segundo periodo de rede de computadores
o professor passou o trabalho 5 supermercados e 10 produtos faze em
linguagem dv c++ eu to gostando muito mais ainda tenho dificuldade
de criar um programa se alguem puder me ajuda eu fico muito agradecido
meu email wander_andrade_26@hotmail.com

[5] Comentário enviado por mushthielv em 24/05/2012 - 21:18h

Quando eu tento compilar este código, aparece:

Na função ‘main’:
aviso: formato ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[16]’ [-Wformat]

O que seria?



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts