segunda-feira, 17 de agosto de 2015

Não cara... isso não é pra deixar o código bonito.

hey there,
Esta postagem será uma especie de post-it ou desabafo, seja lá como vocês queiram levar.
Eu, particularmente fico agoniado em ver algumas postagens em comunidades de tais pessoas que se denominam "programadores" e de fato, não sabem o porquê está programando daquele jeito, aliás.. sabe sim: "o uso de tal função Z é melhor do que a X porque deus quis".



E querem assim teimar que estão certos, ignorar coisas que realmente são úteis dentre outras atitudes estúpidas.
Logo, os iniciantes começam a se acostumar com essas respostas e vamos ficar cada vez mais sufocados de tantos "Bugs Programmers" nervosos que não sabem nem resolver problemas WEB ou por desenvolver aplicações quais as soluções viáveis para eles são jogar a culpa nos responsáveis de infra.

Enfim...

HEUAIEHAUIEHAIUEHAIUEHAIEUHAIEUHE


Voltando o foco da postagem, simplesmente abordara a importância do uso de argumentos passados na linha de comando.


Sabemos que na linguagem C temos a função principal a qual é a primeira a ser colocada na pilha e assim conforme todas as demas funções seguem o mesmo destino. Deste modo, em algumas ocasiões é de grande utilidade passar as informações de entrada para a função, uma dessas ocasiões é quando estamos por exemplo manipulando arquivos.

SP -> |-------------|
      |             | <- qualquer merda
      |_____________|    ex: function()
FP -> |return value |
      |-------------|
      |    arg2     |
      |-------------|
      |    arg1     |
      |-------------|
      |             |
      |    main()   |
      |_____________|
      |             |


Devida a passagem de argumentos na linha de comando capacibilidade a função principal "main()" interagir diretamente para que possa receber os argumentos atribuídos na linha de comando. Para que isto seja realizado, basta declaras dois argumentos dentro da função main, (1) para que seja capaz de contabilizar a quantidade de argumentos passados, logo o tipo de dado terá que ser um inteiro, e o outro argumento (2) um array capaz de armazenar os caracteres de entrada, sendo então um char. Ficando assim:
main(int argc, char *argv[])



Imagine um script de scaneamento de porta, onde deverá passar os argumentos válidos para seu funcionamento. Tal como, ao passar um argumento inválido na linha de comando é retornado um erro onde mostrará o método certo de passar as informações de entrada. Vejamos....

Exemplo teórico
Nome do script: portscan.c
Método de uso: SCRIPT <DOMAIN> <INIT PORT> <FINAL PORT>
Exemplo de uso: # ./portscan www.paunocudadilma.com.br 20 8080

Os argumentos terão como resultado...
ARGV[0] = "portscan.c"
ARGV[1] = <DOMAIN>
ARGV[2] = <INIT PORT>
ARGV[3] = <FINAL PORT>

ARGC = 3

Exemplo na prática...


#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#define INIT_PORT    1
#define FINAL_PORT   65535 
main(int argc, char *argv[]){
..... 
if(argc == 1){ /* Caso não seja passado argumentos, será impresso na tela a msg abaixo */
    fprintf(stdout,"THIS IS AN PORTSCAN IN C\n");
    fprintf(stdout,"Método de uso: %s <DOMAIN> <INIT PORT> <FINAL PORT>\n",argv[0]);
    exit(0); /* obs: não existe "exit 0;", exit é uma função e "0" é seu argumento..
              * Neste caso, a forma correta de passar argumentos para uma função é
              * entre parenteses. E return(0) não existe! RETURN não é uma função!*/
    }
    /* Para ajudar o usuário que não têm passado argumento nenhum, colocaremos uma
     * range de porta para ser percorrida por padrão. 1 - 65535
     * Vai percorer a porra toda, só de raiva. kkkkkkkk */
    if(argc > 1){init_port = INIT_PORT; final_port = FINAL_PORT;}
    
    /* Caso tenha passados os dois argumentos de entrada, convertemos de ALPHA (char) para INT */
    if(argc > 2){init_port = atoi(argv[2]); final_port = atoi(argv[3]);}
    
    /* Logo, começa o scan e os demais script abaixo... */
    if(port = init_port; port<final_port; port++){
     /* Os demais tratamentos irão aqui... */
     ....
    }
    /* blaáh blah blah */
    .....
    
close(sock);
}

Não entendeu porque deus quis. _(_

#######
-----[ EDIT
#######

Só quis fazer uma pequena edição pra deixar uma referencia de um artigo que veio depois deste. Este é BEEEEEEEM mais detalhado do que tenho escrito.
=> http://hc0der.blogspot.com.br/2015/08/passagem-de-parametros-via-linha-de.html

Nenhum comentário:

Postar um comentário