Привет.. я токо начал програмить на си++ по никсы.. и мне нужна помощь. Не знаю, как сделать цикл перебирания ай пи адресов в сокетах... Ай пи адрес вводиться вида 1.2.3.4 мне надо что бы юзер вводил начальный айпи xxx.xxx.xxx.1 и конечный xxx.xxx.xxx.255 как сделать чтобы ай пи перебирались?
#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;
}
Слушай может я полный дурак... Но где сокет???
>Слушай может я полный дурак... Но
>где сокет???ну а тебе на блюдечке сразу софтинку чтоли :)
"Не знаю, как сделать цикл перебирания ай пи адресов в сокетах"
ну вот типа цикл перебирания ипов.
берешь и пробуешь конекаться к каждому.
советую использовать select и конекаться сразу к сотням параллельно и тнебольшой таймаут
Ой большое спасибо :)) Пойду цикл разбирать :))