⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数据包发送程序.txt

📁 一个基于发送tcp/ip协议的数据包发送程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:

if(IP_TTLE <= 0 || IP_TTLE >= MAX_CHAR) { 

fprintf(stderr, "IP TTL参数出错:%s\n", argv[i]); 

return 0; 

} 


break; 

}//End of switch 

break; 

case ’T’: 

switch(argv[i][2]) { 

case ’W’: 

TCP_WINS = atoi(&argv[i][4]); 

if(TCP_WINS <= 0 || TCP_WINS >= MAX_SHORT) { 

fprintf(stderr, "TCP WINS参数出错:%s\n", argv[i]); 

return 0; 


} 

break; 

case ’F’: 

TCP_FLAG = atoi(&argv[i][4]); 

if(TCP_FLAG <= 0 || TCP_FLAG >= MAX_CHAR) { 

fprintf(stderr, "TCP FLAG参数出错:%s\n", argv[i]); 

return 0; 

} 

break; 

case ’S’: 


TCP_SEQ = atol(&argv[i][4]); 

if(TCP_SEQ <= 0 || TCP_SEQ >= MAX_LONG) { 

fprintf(stderr, "TCP SEQ参数出错:%s\n", argv[i]); 

return 0; 

} 

break; 

case ’A’: 

TCP_ACK = atol(&argv[i][4]); 

if(TCP_ACK <= 0 || TCP_ACK >= MAX_LONG) { 

fprintf(stderr, "TCP ACK参数出错:%s\n", argv[i]); 


return 0; 

} 

break; 

case ’U’: 

TCP_URP = atoi(&argv[i][4]); 

if(TCP_URP <= 0 || TCP_URP >= MAX_SHORT) { 

fprintf(stderr, "TCP URP参数出错:%s\n", argv[i]); 

return 0; 

} 

break; 


}//End of switch 

break; 



case ’C’: 

switch(argv[i][2]) { 

case ’T’: 

ICMP_TYPE = atoi(&argv[i][4]); 

if(ICMP_TYPE <= 0 || ICMP_TYPE >= MAX_SHORT) { 

fprintf(stderr, "ICMP TYPE参数出错:%s\n", argv[i]); 

return 0; 


} 

break; 

case ’C’: 

ICMP_CODE = atoi(&argv[i][4]); 

if(ICMP_CODE <= 0 || ICMP_CODE >= MAX_SHORT) { 

fprintf(stderr, "ICMP CODE参数出错:%s\n", argv[i]); 

return 0; 

} 

break; 

case ’I’: 


ICMP_ID = atoi(&argv[i][4]); 

if(ICMP_ID <= 0 || ICMP_ID >= MAX_SHORT) { 

fprintf(stderr, "ICMP ID参数出错:%s\n", argv[i]); 

return 0; 

} 

break; 

case ’S’: 

ICMP_SEQ = atoi(&argv[i][4]); 

if(ICMP_SEQ <= 0 || ICMP_SEQ >= MAX_SHORT) { 

fprintf(stderr, "ICMP SEQ参数出错:%s\n", argv[i]); 


return 0; 

} 

break; 

case ’M’: 

ICMP_TIME = atol(&argv[i][4]); 

if(ICMP_TIME <= 0 || ICMP_TIME >= MAX_LONG) { 

fprintf(stderr, "ICMP TIM参数出错:%s\n", argv[i]); 

return 0; 

} 

break; 


}//End of switch 

break; 



case ’G’: 

switch(argv[i][2]) { 

case ’C’: 

IGMP_CODE = atoi(&argv[i][4]); 

if(IGMP_CODE <= 0 || IGMP_CODE >= MAX_SHORT) { 

fprintf(stderr, "IGMP CODE参数出错:%s\n", argv[i]); 

return 0; 


} 

break; 

case ’T’: 

IGMP_TYPE = atoi(&argv[i][4]); 

if(IGMP_TYPE <= 0 || IGMP_TYPE >= MAX_SHORT) { 

fprintf(stderr, "IGMP TYPEE参数出错:%s\n", argv[i]); 

return 0; 

} 

break; 

case ’A’: 


IGMP_ADDR = atol(&argv[i][4]); 

if(IGMP_ADDR <= 0 || IGMP_ADDR >= MAX_LONG) { 

fprintf(stderr, "ICMP ID参数出错:%s\n", argv[i]); 

return 0; 

} 

break; 

}//End of switch 

break; 



case ’l’://伪造个数设置 


Ip_Forge_Deg = atoi(&argv[i][3]); 

if(Ip_Forge_Deg <= 0) { 

fprintf(stderr, "伪造个数出错:%s\n", argv[i]); 

return 0; 

} 

break; 



case ’f’://伪造模式 

switch(argv[i][2]) { 

case ’1’://模式1,本机IP,需要指定一个端口数据 


Forge_Type = 1; 

Forge_Port = atoi(&argv[i][4]); 

if(Forge_Port <= 0 || Forge_Port >= MAX_PORT) { 

Forge_Port = DEF_PORT_DA; 

} 

break; 

case ’2’://模式2,固定IP设置,必须指定IP和端口 

Forge_Type = 2; 

//预取参数长度 

temp = strlen(&argv[i][3]); 


if(temp <= 0 || temp > MAX_HOSTNAME_LAN) { 

fprintf(stderr, "伪造ip地址出错:%s\n", argv[i]); 

return 0; 

} 

strcpy(Forge_Ip, &argv[i][4]); 

break; 

case ’3’://模式3,指定IP开始递增 

Forge_Type = 3; 

//预取参数长度 

temp = strlen(&argv[i][3]); 


if(temp <= 0 || temp > MAX_HOSTNAME_LAN) { 

fprintf(stderr, "伪造ip地址出错:%s\n", argv[i]); 

return 0; 

} 

strcpy(Forge_Ip, &argv[i][4]); 

break;&nbs, p; 

case ’4’://模式4,ip由文件提供 

Forge_Type = 4; 

//预取参数长度 

temp = strlen(&argv[i][3]); 


if(temp <= 0 || temp > MAX_PATH) { 

fprintf(stderr, "文件信息出错:%s\n", argv[i]); 

return 0; 

} 

strcpy(Forge_Ip_File, &argv[i][4]); 

break; 

case ’5’://模式5,随机产生IP 

Forge_Type = 5; 

break; 

}//End of switch 


break; 

}//End of switch 

}//End of if 

}//End of for 

if(Dest_Ip == ""){ 

fprintf(stderr, "必须包含一个目的地址.\n"); 

return 0; 

} 

return 1; 

} 




////////////////////////////////////////////////////////////// 

//分析ip段 

////////////////////////////////////////////////////////////// 

int GetIpAndPortByLine(char *IPL){ 

//变量 

char IP[MAX_HOSTNAME_LAN] = ""; 

//获取IP 

char *fgp = strrchr(IPL, ’:’); 

//判断是否只包含IP 


if(fgp != NULL){ 

//拷贝ip 

strncpy(IP, IPL, (fgp - IPL)); 

//出错 

if(IP == ""){ 

fprintf(stderr, "IP数据出错.\n"); 

return 0; 

} 

//拷贝端口 

fgp++; 


PORTT = atoi(fgp); 

//端口选择出错,设置默认端口 

if(PORTT <= 0 || PORTT >= MAX_PORT){ 

PORTT = DEF_PORT_DA; 

} 

}else{ 

//只包含ip,设置默认端口 

strcpy(IP, IPL); 

PORTT = DEF_PORT_DA; 

} 


//如果有域名,则要转化为IP 

if(IP[0] < ’0’ || IP[0] > ’9’){ 

struct hostent *server_host = NULL; 

server_host = gethostbyname(IP); 



//出错 

if(server_host == NULL){ 

fprintf(stderr, "无法转换IP,出错代码: %d\n", WSAGetLastError()); 

return 0; 

} 


//地址转化为主机地址,赋值,返回 

IPTL = ntohl((ULONG)(*(struct in_addr*)server_host->h_addr).s_addr); 

}else{ 

IPTL = ntohl(inet_addr(IP)); 

} 

return 1; 

} 



////////////////////////////////////////////////////////////// 

//初始化连接函数 


////////////////////////////////////////////////////////////// 

int SetInitializeSock(){ 

int TimeOut = MAX_TIMEOUT; 

int flag = 1; 



//初始化SOCK_RAW 

WSADATA wsaData = {0}; 

if((ErrorCode = WSAStartup(MAKEWORD(2, 1), &wsaData)) != 0){ 

fprintf(stderr, "WSAStartup 函数失败,错误代码: %d\n", WSAGetLastError()); 

return 0; 


} 

SockRaw = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED); 

if (SockRaw == INVALID_SOCKET){ 

fprintf(stderr, "WSASocket() 函数失败,错误代码: %d\n", WSAGetLastError()); 

return 0; 

} 



//设置IP_HDRINCL以自己填充IP首部 

ErrorCode = setsockopt(SockRaw, IPPROTO_IP, IP_HDRINCL, (char *)&flag, sizeof(int)); 

if (ErrorCode == SOCKET_ERROR){ 


fprintf(stderr, "setsockopt(IP_HDRINCL) 函数失败,错误代码: %d\n", WSAGetLastError()); 

return 0; 

} 

//设置发送超时 

ErrorCode = setsockopt(SockRaw, SOL_SOCKET, SO_SNDTIMEO, (char*)&TimeOut, sizeof(TimeOut)); 

if(ErrorCode == SOCKET_ERROR){ 

fprintf(stderr, "setsockopt(SO_SNDTIMEO) 函数失败,错误代码: %d\n", WSAGetLastError()); 

return 0; 

} 

return 1; 


} 



////////////////////////////////////////////////////////////// 

//效验和函数 

////////////////////////////////////////////////////////////// 

USHORT checksum(USHORT *buffer, int size) { 

unsigned long cksum = 0; 

while(size > 1){ 

cksum += *buffer++; 

size -= sizeof(USHORT); 


} 

if(size){ 

cksum += *(UCHAR*)buffer; 

} 

cksum = (cksum >> 16) + (cksum & 0xffff); 

cksum += (cksum >> 16); 

return (USHORT)(~cksum); 

} 



////////////////////////////////////////////////////////////// 


//分配内存函数1 

////////////////////////////////////////////////////////////// 

int AssMemory(ULONG **a, ULONG sa, USHORT **b, ULONG sb){ 

*a = (ULONG *)malloc(sa * sizeof(ULONG)); 

*b = (USHORT *)malloc(sb * sizeof(USHORT)); 



if(*a == NULL || *b == NULL){ 

fprintf(stderr, "分配内存失败.\n"); 

return 0; 

} 


memset(*a, 0, sa * sizeof(ULONG)); 

memset(*b, 0, sb * sizeof(USHORT)); 



return 1; 

} 

////////////////////////////////////////////////////////////// 

//分配内存函数2 

////////////////////////////////////////////////////////////// 

int AssMemory(USHORT **a, ULONG sa, USHORT **b, ULONG sb){ 

*a = (USHORT *)malloc(sa * sizeof(USHORT)); 


*b = (USHORT *)malloc(sb * sizeof(USHORT)); 

if(*a == NULL || *b == NULL){ 

fprintf(stderr, "分配内存失败.\n"); 

return 0; 

} 

memset(*a, 0, sa * sizeof(USHORT)); 

memset(*b, 0, sb * sizeof(USHORT)); 



return 1; 

} 


////////////////////////////////////////////////////////////// 

//打印帮助 

////////////////////////////////////////////////////////////// 

void Usage(){ 

//软件版权信息,帮助信息 

fprintf(stderr, "================================================================\n" 

"数据包发送程序1.0 (lecher后门附带软件)\n" 

"日期: [2004.4.25]\n" 

"作者: [Zvrop][[email]zvrop@163.com[/email]]\n" 

"环境: [WINXP + Visual C++ 6.0]\n" 


"主页: [[url]http://www.gedao.com[/url]][[url]http://www.ringz.org[/url]]\n" 

"================================================================\n" 

"使用方法:\n" 

"NetSendData.exe\n" 

"\t-t:[chr]/-u:[chr]/-c:[chr]/-g:[chr]\n" 

"\t-n:[num]\n" 

"\t-x:[num]\n" 

"\t-m:[num]\n" 

"\t-d:[chr]/-F:[chr]\n" 

"\t-S:[num]\n" 


"\t-IS:[num]|-II:[num]|-IF:[num]|-IT:[num]\n" 

"\t-TW:[num]|-TF:[num]|-TS:[num]|-TA:[num]|-TU:[num]\n" 

"\t-CT:[num]|-CC:[num]|-CI:[num]|-CS:[num]|-CM:[num]\n" 

"\t-GC:[num]|-GT:[num]|-GA:[num]\n" 

"\t-l:[num]\n" 

"\t-f1:[num]/-f2:[chr]/-f3:[chr]/-f4:[chr]/-f5\n" 

"\t-?/-h/-H\n" 

"================================================================\n" 

"以上\"chr\"标识表示该参数为字符串型,\"num\"标识表示该参数为纯数值型\n" 

"\"|\"标识符标识该组参数可以同时设置多个,\"/\"标识符表示该组参数同时只能设置一个,若设置了多个,则以最后出现的参数为准.\n" 


"================================================================\n" 

"基本参数:\n" 

"-t:[chr] 发送tcp报文,后跟着一个目的位置地址(IP:<PORT>,端口默认为:%u)\n" 

"-u:[chr] 发送udp报文,后跟着一个目的位置地址(IP:<PORT>)\n" 

"-c:[chr] 发送icmp报文,后跟着一个目的位置地址(IP:<PORT>)\n" 

"-g:[chr] 发送igmp报文,后跟着一个目的位置地址(IP:<PORT>)\n" 

"-n:[num] 发送数据报文组的组数,一组报文中可包含任意数量的报文,默认值:%u,最大值:%u\n" 

"-x:[num] 每组发送的报文数量,默认值:%u,最大值:%u\n" 

"-m:[num] 每发送一组报文的延迟时间,在发送一组信息时候,不输出出错信息,默认值:%u\n" 

"-?/-h/-H 打印帮助信息\n" 


"\n附加信息参数:\n" 

"-d:[chr] 发送报文的附加数据,最大长度:%u字节\n" 

"-F:[chr] 发送报文的附加数值由文件指定,必须给出完整文件名.\n" 

"-S:[num] 发送报文附加数据的最大长度,当该值大于你提供的信息长度时,数据不足处补\"0\",当该值不等于32的整数倍时,将被自动扩充.默认值:0,表示不要对报文添加任何附加数据,通常情况下,-d和-F参数会自动改版该值,但是如果你设置了该值,则-d和-F参数就不会更改该值.\n" 

"\n报文字段参数(建议不要使用,除非您完全了解每个字段的含义,挂号内为该字段占的空间字节数,在没有特殊说明的情况下,该值在发送之前将会被转换字节位置(主机->网络)):\n" 

"-IS:[num] IP报文(1):服务类型(TOS)位参数字段设置,默认:%u\n" 

"-II:[num] IP报文(2):标识位参数字段设置,默认值:%u\n" 

"-IF:[num] IP报文(2):标志位参数设置,默认值:%u\n" 

"-IT:[num] IP报文(1):TTL位参数设置,默认值:%u\n" 

"-TW:[num] TCP报文(2):窗口大小位参数设置,默认值:%u\n" 


"-TF:[num] TCP报文(1):标志位参数设置,默认值:%u\n" 

"-TS:[num] TCP报文(4):序列号位参数设置,默认值:%u\n" 

"-TA:[num] TCP报文(4):确认号位参数设置,默认值:%u\n" 

"-TU:[num] TCP报文(2):紧急数据偏移位参数设置,默认值:%u\n" 

"-CT:[num] ICMP报文(2):类型位参数设置,默认值:%u\n" 

"-CC:[num] ICMP报文(2):代码位参数设置,默认值:%u\n" 

"-CI:[num] ICMP报文(2):识别号位参数设置,默认值:%u\n" 

"-CS:[num] ICMP报文(2):序号位参数设置,默认值:%u\n" 

"-CM:[num] ICMP报文(4):时间戳位参数设置,默认值:%u\n" 

"-GC:[num] IGMP报文(2):版本位参数设置,默认值:%u\n" 


"-GT:[num] IGMP报文(2):类型位参数设置,默认值:%u\n" 

"-GA:[num] IGMP报文(4):组地址位参数设置,默认值:%u\n" 

"\n伪造源参数设置:\n" 

"-l:[num] 伪造源个数设置,默认值:%u,该值可以和发送次数参数没有关系,系统会自动循环发送.但是设置少了,后面的参数将不会被发送,理论上可以设置到%u个,但这取决于你内存的大小.\n" 

"-f1:[num] 伪造模式1,本机IP,需要提供一个端口参数,默认为:%u,所有的伪造IP均采用这个参数提供,也就是说,提供了这个参数,设置伪造源个数参数就已经无效,白白占用内存而已.\n" 

"-f2:[chr] 伪造模式2,固定IP,需要提供一个源位置参数(IP:<PORT>),[表示含义同本机IP设置]\n" 

"-f3:[chr] 伪造模式3,固定IP递增,需要提供一个起始伪造位置参数(IP:<PORT>),对这个提供的参数进行递增操作,比如你想制造一个c段的伪造源,就设置这个参数为192.168.1.1:12345,然后伪造源个数设置为255个既可,注意,递增IP的同时,端口也在递增.\n" 

"-f4:[chr] 伪造模式4,从文件获取源位置参数,须提供一个本地文件名,文件中每个地址占一行,默认端口为%u,支持域名格式(运行期间也会转换为IP),采用IP:<PORT>格式,例如:192.168.1.2:12345,[url]www.web.com:54321.[/url]\n" 

"-f5 伪造模式5,随机产生IP,端口\n" 

"================================================================\n" 


"[警告:本软件有一定危险性,请您在完全了解的情况下使用]\n" 

"[作者不对软件造成的任何问题负任何形式的责任]\n" 

"该软件作为Lecher后门附带的一个发送数据包的程序,事实上同样的例子网上已经有很多,也很早就有了,我这次写全了几个常用的数据格式,用预先计算效验和的办法,提高发送报文速度,几乎提供了所有可变参数的修改,希望大家用的时候能方便一点,如果觉得比较麻烦,哪位仁兄可以写一个shell来调用,也是很方便的啦,俺不擅长写GUI的程序了,^_^~\n" 

, 

DEF_PORT_DA, 

Send_Degree,MAX_LONG, 

Send_Sdeg,MAX_LONG, 

Delay_Time, 

MAX_BUFF_LEN, 

IP_TOSE, 


IP_IDENT, 

IP_FLAG, 

IP_TTLE, 

TCP_WINS, 

TCP_FLAG, 

TCP_SEQ, 

TCP_ACK, 

TCP_URP, 

ICMP_TYPE, 

ICMP_CODE, 


ICMP_ID, 

ICMP_SEQ, 

ICMP_TIME, 

IGMP_CODE, 

IGMP_TYPE, 

IGMP_ADDR, 

Ip_Forge_Deg,MAX_LONG, 

DEF_PORT_DA 

); 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -