Alecgn 0 Denunciar post Postado Fevereiro 14, 2010 Olá pessoal... sou iniciante em C++ estou tendo alguns probleminhas com um código que estou implementando... o programa tem o seguinte propósito: ler um endereço IP inicial e um final digitados pelo usuário, mostrar todos os IPs da faixa de endereços... Na realidade pretendo implementar o programa para testar se todos os hosts da faixa de endereços estão "vivos" (operacionais), mas preciso de ajuda para a lógica da geração dos IPs da faixa... Escrevi esse código bem simples que exibe na tela TODOS os endereços existentes, mas preciso de um código que armazene o IP resultante das 4 variáveis OCT para uma outra variável do tipo string, exibindo um IP por vez; segue-se o código: #include <iostream> using namespace std; int main() { int OCT1, OCT2, OCT3, OCT4; // 4 OCTETOS DE UM ENDEREÇO IP for (OCT1 = 0; OCT1 <= 255; OCT1++) for (OCT2 = 0; OCT2 <= 255; OCT2++) for (OCT3 = 0; OCT3 <= 255; OCT3++) for (OCT4 = 0; OCT4 <= 255; OCT4++) cout << OCT1 << "." << OCT2 << "." << OCT3 << "." << OCT4 << "\n"; system ("pause > nul"); return 0; } Alguém poderia dar uma luz ? Antecipadamente agradeço... Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Fevereiro 14, 2010 Olá Alecgn, seja bem vindo ao fórum! Você pode fazer o seguinte: (atenção: pseudocódigo) typedef struct IP_st { int o1, o2, o3, o4; } IP_t; // você define essas funções! IP_t string_to_ip(string str); string ip_to_string(IP_t ip); int cmp_ip(IP_t ip1, IP_t ip2); //compara dois IP_t, retorna 0 se forem iguais, -1 se ip1 > ip2 ou 1 se ip1 < ip2 void incrementa_ip(IP_t &ip); //incrementa o endereço de IP. int main() { IP_t inicio, final; inicio = string_to_ip(getline()); final = string_to_ip(getline()); int r = cmp_ip(inicio, final) if (r != 1) { print("ERRO: o endereço de ip final deve ser maior que o inicial!\n"); return 1; } while (cmp_ip(inicio, final)!= 0) { print(ip_to_string(inicio)); incrementa_ip(inicio); } return 0; } um exemplo de implementação da função 'ip_to_string': #include <sstream> string ip_to_string(IP_t ip) { std::stringstream s; s << ip.o1 << '.' ip.o2 << '.' << ip.o3 << '.' << ip.o4; return s.str(); } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Fevereiro 19, 2010 Se isso ajudar: #include <string> #include <sstream> #include <iostream> #include <vector> using namespace std; vector<int> splitIP(string s, char c) { int octeto_atual = 0; int inicio = 0; int posicao_separador = 0; int placeholder; vector<int> octetos; octetos.reserve(4); while( inicio < s.length() && (posicao_separador = s.find('.', inicio )) != string::npos) { istringstream tmps(s.substr(inicio, posicao_separador)); tmps >> placeholder; octetos.push_back(placeholder); inicio = posicao_separador + 1; octeto_atual++; } istringstream final(s.substr(inicio, s.length())); final >> placeholder; octetos.push_back(placeholder); return octetos; } void listaIP(vector<int>ipInicial, vector<int> ipFinal) { int idx1[4] = {ipInicial.at(0), ipInicial.at(1), ipInicial.at(2), ipInicial.at(3)}; while(idx1[0] != ipFinal.at(0) || idx1[1] != ipFinal.at(1) || idx1[2] != ipFinal.at(2) || idx1[3] != ipFinal.at(3)) { idx1[3] = (idx1[3] + 1)%256; idx1[2] = (idx1[3] == 0)? (idx1[2] + 1)%256 : idx1[2]; idx1[1] = (idx1[2] == 0 && idx1[3] == 0)?(idx1[1] + 1)%256 : idx1[1]; idx1[0] = (idx1[1] == 0 && idx1[2] == 0 && idx1[3] == 0)? (idx1[0] + 1)%256 : idx[0]; cout << idx1[0] << '.' << idx1[1] << '.' << idx1[2] << '.' << idx1[3] << endl; } } int main() { string IP_inicial = ""; string IP_final = ""; cout << "Digite o ip inicial: "; getline(cin, IP_inicial); cout << "Digite o ip final: "; getline(cin, IP_final); if (!IP_inicial.compare(IP_final)) { cout << "Não existem ips nessa faixa." << endl; } else { vector<int> ipInicial = splitIP(IP_inicial,'.'); vector<int> ipFinal = splitIP(IP_final, '.'); listaIP(ipInicial, ipFinal); } return 0; } Compartilhar este post Link para o post Compartilhar em outros sites