Пардон,вот код:
#include<sys/socket.h>
#include<sys/types.h>
#include<resolv.h>
#include<stdio.h>
#include<errno.h>
#include<glib.h>
#include<pthread.h>
#include<signal.h>
#define PROCNUM 30
GList* ips; // список ip-шников
void generate_ips()
{
int i;
for(i=1;i<255;i++)
ips=g_list_append(ips,g_strdup_printf("192.168.22.%d",i));
}
void* try_ip(void* ip)
{
int sock;
struct sockaddr_in server;
memset(&server,sizeof(server),0);
server.sin_family=AF_INET;
server.sin_port=htons(139);
server.sin_port=htons(139);
inet_aton(ip,&server.sin_addr);
sock=socket(PF_INET,SOCK_STREAM,0);
if(sock<0){
printf("error %d while creating socket!\n",errno);
exit(1);
}
if(connect(sock,&server,sizeof(server))==0){
printf("==>%s\n",ip);
close(sock);
}
raise(SIGCHLD);
return NULL;
}
void on_child_exited(int sig)
{
if(ips)
{
pthread_t child; if((pthread_create(&child,NULL,&try_ip,(void*)(ips->data)))!=0){
printf("error creating thread!\n");
}
ips=ips->next;
}
}
int main(int argc,char* argv[])
{
int ips_in_scan=0;
struct sigaction act;
memset(&act,sizeof(act),0);
act.sa_handler=on_child_exited;
act.sa_flags=SA_NOMASK | SA_RESTART; //не уверен с флагами
sigaction(SIGCHLD,&act,0);
generate_ips();
for(;ips,ips_in_scan<PROCNUM;ips=ips->next,ips_in_scan++)
{
pthread_t child;
if((pthread_create(&child,NULL,&try_ip,(void*)(ips->data)))!=0)
{
printf("error creating thread!\n");
}
}
sleep(100);
return 0;
}