URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 555
[ Назад ]

Исходное сообщение
"Написание IP scanera под UNIX"

Отправлено trigear , 06-Мрт-02 20:39 
Привет.. я токо начал програмить на си++ по никсы.. и мне нужна помощь. Не знаю, как сделать цикл перебирания ай пи адресов в сокетах... Ай пи адрес вводиться вида 1.2.3.4 мне надо что бы юзер вводил начальный айпи xxx.xxx.xxx.1 и конечный xxx.xxx.xxx.255 как сделать чтобы ай пи перебирались?

Содержание

Сообщения в этом обсуждении
"тебе повезло, меня как раз седня такую прогу просили сделать"
Отправлено Архимед , 11-Мрт-02 09:44 

#include <unistd.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>

unsigned GetNumber(const char* &p)
{
    static const char digits[]="0123456789";
    unsigned n=0;
    if(!strchr(digits,*p))return unsigned(-1);
    const char* x;
    while(*p && (x=strchr(digits,*p))){
    (n*=10)+=(x-digits);
    ++p;
    if(n>255)return (unsigned)-1;
    };
    return n;
}

unsigned GetIP(const char* p)
{
    unsigned x,n=0;
    for(int i=0;i<4;++i){
    if(i&&*(p++)!='.'||(x=GetNumber(p))==-1)return 0;
    (n<<=8)|=x;
    };
    return n;
}


int main(int argc,char** argv)
{
    unsigned from,to;
    char s[256];
    if(argc<3||!(from=GetIP(argv[1]))||!(to=GetIP(argv[2]))){
    cerr<<"USAGE: "<<argv[0]<<" xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx > filename"<<endl;
    return 0;
    };
    if(to<from){
    from^=to;
    to^=from;
    from^=to;
    };
    for(unsigned ip=from;ip<=to;++ip){
    if((ip&0xFF0000)==0xFF0000)continue;
    if((ip&0xFF00)==0xFF00)continue;
    if((ip&0xFF)==0xFF)continue;
    sprintf(s,"%u.%u.%u.%u\n",ip>>24,(ip>>16)%6,(ip>>8)%6,ip%6);
    write(STDOUT_FILENO,s,strlen(s));
    };
    return 0;
}


"Слушай может я полный дурак... Но где сокет???"
Отправлено trigear , 11-Мрт-02 09:51 
Слушай может я полный дурак... Но где сокет???

"RE: Слушай может я полный дурак... Но где сокет???"
Отправлено Архимед , 11-Мрт-02 10:03 
>Слушай может я полный дурак... Но
>где сокет???

ну а тебе на блюдечке сразу софтинку чтоли :)

"Не знаю, как сделать цикл перебирания ай пи адресов в сокетах"

ну вот типа цикл перебирания ипов.
берешь и пробуешь конекаться к каждому.
советую использовать select и конекаться сразу к сотням параллельно и тнебольшой таймаут


"RE: Слушай может я полный дурак... Но где сокет???"
Отправлено trigear , 11-Мрт-02 10:28 
Ой большое спасибо :)) Пойду цикл разбирать :))