.c 文件
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#include <linux/tcp.h>
#include <linux/ip.h>
#include <unistd.h>
#include <pthread.h>
#include "yldscan.h"
//定义参数解析结构
typedef struct __list_arg{
char scanname[256];
char dstaddr[32];
unsigned short port_start;
unsigned short port_end;
}ListArg;
#define SCAN_TYPE_TCPSYN 0
#define SCAN_TYPE_TCPFIN 1
#define SCAN_TYPE_TCPNULL 2
#define myprintf(str,arg...) printf(str,##arg)
#define SELFIP "192.168.22.102"
int g_scantype = 0;
static int parse_arg(int argc,char *argv[],ListArg *parg)
{
if(argc <= 1)
{
return -1;
}
if(!strcmp(argv[1],"tcpsyn") || !strcmp(argv[1],"tcp") || !strcmp(argv[1],"tcpfin") || !strcmp(argv[1],"tcpnull"))
{
if(argc < 5)
return -1;
if(!strcmp(argv[1],"tcpsyn"))
sprintf(parg->scanname,"%s","tcpsyn");
else if(!strcmp(argv[1],"tcp"))
sprintf(parg->scanname,"%s","tcp");
else if(!strcmp(argv[1],"tcpfin"))
sprintf(parg->scanname,"%s","tcpfin");
else if(!strcmp(argv[1],"tcpnull"))
sprintf(parg->scanname,"%s","tcpnull");
parg->port_start = atoi(argv[2]);
parg->port_end = atoi(argv[3]);
if(parg->port_start > 65535 || parg->port_start <=0 || parg->port_end > 65535 || parg->port_end <=0)
return -1;
if(parg->port_start > parg->port_end)
return -1;
sprintf(parg->dstaddr,"%s",argv[4]);
}
else if(!strcmp(argv[1],"ping"))
{
if(argc < 3)
return -1;
sprintf(parg->scanname,"%s","ping");
sprintf(parg->dstaddr,"%s",argv[2]);
}
else
return -1;
return 0;
}
//校验和计算
unsigned short calc_cksum(char *buff,int len)
{
int blen = len;
unsigned short *mid = (unsigned short*)buff;
unsigned short te = 0;
unsigned int sum = 0;
while(blen > 1)
{
sum += *mid++;
blen -= 2;
}
if(blen == 1)
{
te = *(unsigned char*)mid;
te = (te << 8) & 0xff;
sum += te;
}
sum = (sum >> 16) + (sum&0xffff);
sum += sum >>16;
return (unsigned short)(~sum);
}
void show_usage(void)
{
myprintf("Usage...: \n tcp startport endport ipaddr\n");
myprintf(" tcpsyn startport endport ipaddr\n");
myprintf(&#