📄 数据包发送程序.txt
字号:
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 + -