Em um ip interno os 7 primeiros digitos assumem sempre a mesa forma? [RESOLVIDO]

1. Em um ip interno os 7 primeiros digitos assumem sempre a mesa forma? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/09/2018 - 09:32h

Olá, escrevi um código em C para pegar o IP (versão 4) interno do meu micro e gostaria de saber se ele é seguro em relação ao seu proposito final.

Eis aqui o código:


#include <stdio.h>
#include <string.h>
#include <ifaddrs.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(void){

struct ifaddrs *ifap, *ifa;
struct sockaddr_in *addr;
char adress[16];

if(getifaddrs(&ifap)!=-1){

for(ifa=ifap; ifa; ifa=ifa->ifa_next){

if(ifa->ifa_addr->sa_family==AF_INET){

addr=(struct sockaddr_in*)ifa->ifa_addr;
strncpy(adress, inet_ntoa(addr->sin_addr), 16);

if(strncmp(adress, "192.168", 7)==0){

printf("\n================================\n");
printf("Interface: %s\nAdress: %s\n",
ifa->ifa_name, adress);
printf("================================\n\n");
}
}
}
}

freeifaddrs(ifap);

return 0;
}


Pergunta extra: É verdade que o Linus "Tosvaldo" odeia gente que coloca if dentro de if? Isso é uma má prática em programação C?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/09/2018 - 10:55h

Um endereço IPv4 expresso como dotted-quad numa string de texto nunca terá mais de 15 caracteres (máximo de 3 para cada um dos quatro octetos, mais os três pontos entre os octetos). Com espaço para mais um caráter, a fim de acomodar o byte nulo que finaliza a string, então a resposta é que 16 caracteres será sempre seguro para um endereço IPv4.

Quanto a o que famosamente irascível e descontrolado Torvalds odeia, acho que a lista deve ser BEM grande (talvez até um pouquinho maior do que a minha, hehehe...). Não achei referência específica a ifs dentro de ifs, mas não duvido. Você teria uma referência ou pelo menos uma descrição melhor do que ele teria dito, ou a que situações se aplicaria?

3. Re: Em um ip interno os 7 primeiros digitos assumem sempre a mesa forma? [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 17/09/2018 - 16:12h

Boa tarde.

Quanto a primeira pergunta, o @paulo1205 já respondeu, certo?

Com relação a outra pergunta, o Linus não tem uma regra contra if's até onde já li, mas sim contra o aninhamento demasiado, e pode ver o que ele pensa na seção 1 do "Coding Style" do Kernel, aqui: https://github.com/torvalds/linux/blob/master/Documentation/process/coding-style.rst

"The answer to that is that if you need more than 3 levels of indentation, you're screwed anyway, and should fix your program."

"A resposta é que se você precisa de mais de três níveis de indentação, você já está [*****], e deveria consertar seu programa."

Enzo Ferber
[]'s


$ indent -kr -i8 src.c

"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right."
- linux/Documentation/CodingStyle - TORVALDS, Linus.



4. Re: Em um ip interno os 7 primeiros digitos assumem sempre a mesa forma? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/09/2018 - 21:01h

@paulo1205 @EnzoFerber Esse lance que eu disse em relação ao Linus "Tosvaldo" (falo Tosvaldo por causa desse vídeo > https://www.youtube.com/watch?v=LHxFGPrlJBQ ) e o uso de if's eu não tenho certeza se é verdade! O que eu me lembre eu tinha visto sobre isso em um chat do StackExchange, portanto não sei se é 100 % verdade, mas também não duvido que ele realmente odeie gente que coloque if dentro de if e dentro de outro if....






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts