资源简介
说明:本程序原为四川大学信息安全产品开发实践的课程设计.
本程序集合了8种端口扫描方式,connect,syn,fin,null,xmas,ack,udp和windows扫描。其中connect和syn的实现用到了线程池的技术。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include“ackscan.h“
#include“function.h“
#define PACKET_SIZE 1024
short *gFlag;
int gStartPort;
int gCount = 0;
static void recv_packet(void *param)
{
int sockfd;
int len;
unsigned char packet[PACKET_SIZE];
struct sockaddr_in *sourceAddr;
struct tcphdr *tcp;
len = sizeof(struct sockaddr);
sockfd = *((int*)param);
tcp = (struct tcphdr*)(packet+sizeof(struct ip));
while(1)
{
if(recvfrom(sockfdpacketPACKET_SIZE0(void*)sourceAddr&len)<0)
{
perror(“error:can‘t recve any packet\n“);
continue;
}
if(tcp->dest==htons(8086)&&tcp->rst)
{
//fprintf(stderr“Port:%d status:Opened!\n“ntohs(tcp->source));
gFlag[ntohs(tcp->source)-gStartPort] = 1;
fflush(stdout);
gCount++;
}
}
}
int ackscan(char *destIPint start_portint end_port)
{
int sockfd;
const int one = 1;
int tid;
int scan_port;
char sourceIP[16];
struct sockaddr_in dest;
struct iphdr *ip;
struct tcphdr *tcp;
struct PsdHead psdHead;
unsigned char netPacket[PACKET_SIZE];
gCount = 0;
gStartPort = start_port;
gFlag = (short*)malloc(end_port-start_port);
if(gFlag==NULL)
{
fprintf(stderr“error:failed to malloc %d Bytes\n“(end_port-start_port)*sizeof(short));
return -1;
}
memset(gFlag0sizeof(gFlag));
memset(sourceIP0sizeof(sourceIP));
getLocalIP(sourceIP);
if((sockfd=socket(AF_INETSOCK_RAWIPPROTO_TCP))<0)
{
perror(“error:failed to create raw socket!\n“);
return -1;
}
if(setsockopt(sockfdIPPROTO_IPIP_HDRINCL&onesizeof(one))<0)
{
perror(“error:failed to setsockopt!\n“);
return -1;
}
memset(netPacket0sizeof(netPacket));
ip = (struct iphdr*)netPacket;
ip->ihl = 5;
ip->version = 4;
ip->tos = 0;
ip->tot_len = sizeof(struct ip)+sizeof(struct tcphdr);
ip->id = htons(13579);
ip->frag_off = htons(16384);
ip->ttl = 64;
ip->protocol = IPPROTO_TCP;
ip->check = 0;
ip->saddr = inet_addr(sourceIP);
ip->daddr = inet_addr(destIP);
tcp = (struct tcphdr*)(netPacket+sizeof(struct ip));
tcp->source = htons(8086);
tcp->dest = 0;
tcp->seq = htonl(1143111041);
tcp->ack_seq = 0;
tcp->doff = sizeof(struct tcphdr)/4;
tcp->fin = 0;
tcp->syn = 0;
tcp->rst = 0;
tcp->psh = 0;
tcp->ack = 1;
tcp->urg = 0;
tcp->window = htons(10052);
tcp->check = 0;
tcp->urg_ptr = 0;
if(pthread_create((void*)&tidNULL(void*)recv_packet(void*)&sockfd)<0)
{
perror(“error:failed to create thread!\n“);
return -1;
}
dest.sin_family = AF_INET;
dest.sin_addr.s_addr = inet_addr(destIP);
for(scan_port = start_port;scan_port<=end_port;scan_port++)
{
tcp->dest = htons(scan_port);
dest.sin_port = tcp->dest;
psdHead.source
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-01-01 00:46 端口扫描代码\
文件 3922 2013-12-27 14:31 端口扫描代码\ackscan.c
文件 109 2013-12-27 00:47 端口扫描代码\ackscan.h
文件 3452 2013-12-30 22:30 端口扫描代码\ackscan.o
文件 2044 2013-12-27 13:09 端口扫描代码\connectscan.c
文件 120 2013-12-24 00:22 端口扫描代码\connectscan.h
文件 2308 2013-12-30 22:30 端口扫描代码\connectscan.o
文件 3583 2013-12-27 14:20 端口扫描代码\finscan.c
文件 108 2013-12-27 13:13 端口扫描代码\finscan.h
文件 3248 2013-12-30 22:30 端口扫描代码\finscan.o
文件 1686 2013-12-27 13:37 端口扫描代码\function.c
文件 497 2013-12-27 13:13 端口扫描代码\function.h
文件 1656 2013-12-30 22:30 端口扫描代码\function.o
文件 35749 2013-12-30 22:30 端口扫描代码\main
文件 5475 2013-12-27 14:36 端口扫描代码\main.c
文件 5380 2013-12-30 22:30 端口扫描代码\main.o
文件 933 2013-12-27 13:40 端口扫描代码\makefile
文件 3709 2013-12-26 17:21 端口扫描代码\nullscan.c
文件 116 2013-12-11 00:16 端口扫描代码\nullscan.h
文件 3252 2013-12-30 22:30 端口扫描代码\nullscan.o
文件 3413 2013-12-27 14:42 端口扫描代码\osdetect.c
文件 85 2013-12-27 13:41 端口扫描代码\osdetect.h
文件 2612 2013-12-30 22:30 端口扫描代码\osdetect.o
文件 4798 2013-12-27 13:16 端口扫描代码\synscan.c
文件 108 2013-12-03 19:34 端口扫描代码\synscan.h
文件 3856 2013-12-30 22:30 端口扫描代码\synscan.o
文件 2768 2013-12-24 01:21 端口扫描代码\threadpool.c
文件 364 2013-12-21 17:36 端口扫描代码\threadpool.h
文件 2964 2013-12-30 22:30 端口扫描代码\threadpool.o
文件 3030 2013-12-26 23:12 端口扫描代码\udpscan.c
文件 103 2013-12-26 23:12 端口扫描代码\udpscan.h
............此处省略7个文件信息
评论
共有 条评论