Usando comandos do sistema em C

Publicado por Perfil removido em 11/06/2008

[ Hits: 23.785 ]

 


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

Instalando Grub Customizer no Debian 10 Buster

Adicionar repositório Flatpak do Fedora em outras distribuições

Video aula: como instalar o Nessus

Ressuscitando a impressora no Kurumin

Classes para vários tipos (templates)

Leitura recomendada

Acessando um valor dada sua posição numa matriz bidimensional

Função recursiva para inverter um vetor de caracteres

Fatorial usando recursividade

Melhor Controle de Memória de Strings em C

Qt - Adicionando uma foto em Label (QLabel)

  

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