- 论坛徽章:
- 0
|
10可用积分
这个书上的错误还真不少!自己已经修改了一部分,勉强编译过去了。但是运行段错误
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <error.h>
#include <pthread.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
typedef struct _post_segment
{
struct in_addr dest_ip; //目标IP
unsigned short int min_port; //起始端口
unsigned short int max_port; //结束端口
}port_segment;
void my_err(const char *err_string,int line)
{
fprintf(stderr,"line:%d:",line);
perror("err_str_ing");
exit(1);
}
int do_scan(struct sockaddr_in serv_addr)
{
int conn_fd;
int ret;
conn_fd=socket(AF_INET,SOCK_STREAM,0);
if(conn_fd<0)
{
my_err("socket\n",__LINE__);
exit(1);
}
if(ret=connect(conn_fd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))<0)
{
/*if(error=ECONNREFUSED)
{
close(connfd);
return 0;
}
else
{
close(connfd);
return 0
}*/
perror("connect");
exit(1);
}
}
void * scaner(void *arg)
{
unsigned short int i;
struct sockaddr_in serv_addr;
port_segment portinfo;
memcpy(&portinfo,arg,1000);
memset(&serv_addr,0,sizeof(struct sockaddr_in));
bzero(&(serv_addr.sin_zero),8);
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=portinfo.dest_ip.s_addr;
for(i=portinfo.min_port;i<=portinfo.max_port;i++)
{
serv_addr.sin_port=htons(i);
if(do_scan(serv_addr)<0)
{
perror("error");
exit(1);
}
}
}
[[i] 本帖最后由 yby123 于 2009-5-29 23:44 编辑 [/i]] |
|