实验要求
- 能至少扫描5个IP地址;
- 针对每个iP地址,开设100个线程同时对其进行扫描;
- 如果端口打开,使用函数getservbyport获取其服务名,在屏幕上打印:IP port servername,如果是未知服务,则屏幕显示:ip port unkonown
实验环境
Red Hat 9
代码
ThreadsPortScan.c
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<errno.h>
void print_usage(char* str)
{
printf("the command %s usage is:\n",str);
printf("%s Ip_Address min_port max_port\n");
}
typedef struct portInfo{
struct in_addr dest_ip;
unsigned short int min_port;
unsigned short int max_port;
}Port;
int scanone(struct sockaddr_in scanip)
{
int sockfd;
if(-1==(sockfd=socket(AF_INET, SOCK_STREAM, 0)))
{
perror("error in generate socket\n");
exit(1);
}
int ret = connect(sockfd, (struct sockaddr*)&scanip,