请问谁有伪装数据包向web服务器发送请求的源代码? 该伪装数据包能够伪装假的本地ip地址,向web服务器发送http请求,谁有这样的源代码,如果有,可以送上200分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #pragma pack(1)#define WIN32_LEAN_AND_MEAN#include <winsock2.h>#include <ws2tcpip.h>#include <stdio.h>#include <stdlib.h>#define MAX_MESSAGE 4068#define MAX_PACKET 4096#define DEFAULT_PORT 1234#define DEFAULT_IP "127.0.0.1"#define DEFAULT_COUNT 5#define DEFAULT_MESSAGE "stone"typedef struct ip_hdr{ unsigned char ip_verlen; unsigned char ip_tos; unsigned short ip_totallength; unsigned short ip_id; unsigned short ip_offset; unsigned char ip_ttl; unsigned char ip_protocol; unsigned short ip_checksum; unsigned int ip_srcaddr; unsigned int ip_destaddr;} IP_HDR,*PIP_HDR,FAR* LPIP_HDR;typedef struct udp_hdr{ unsigned short src_portno; unsigned short dst_portno; unsigned short udp_length; unsigned short udp_checksum;} UDP_HDR,*PUDP_HDR;unsigned long dwToIP,dwFromIP;unsigned short iToPort,iFromPort;DWORD dwCount;char strMessage[MAX_MESSAGE];void usage(char *progname){printf("usage: %s [-fp:int] [-fi:str] [-tp:int] [-ti:str] [-n:int] [-m:str]\n",progname);printf(" -fp:int From(sender) port number\n");printf(" -fi:IP From(sender) IP address\n");printf(" -fp:int To(recipient) port number\n");printf(" -fi:IP To(recipient) Ip address\n");printf(" -n:int Number of times to read message\n");printf(" -m:str Size of buffer to read\n\n");ExitProcess(1);}void ValidateArgs(int argc,char **argv){ int i; iToPort=DEFAULT_PORT; iFromPort=DEFAULT_PORT; dwToIP=inet_addr(DEFAULT_IP); dwFromIP=inet_addr(DEFAULT_IP); dwCount=DEFAULT_COUNT; strcpy(strMessage,DEFAULT_MESSAGE); for(i=1;i<argc;i++) { if((argv[i][0]=='-')||(argv[i][0]=='/')) { switch(tolower(argv[i][1])) { case 'f': switch(tolower(argv[i][2])) { case 'p': if(strlen(argv[i])>4) iFromPort=atoi(&argv[i][4]); break; case 'i': if(strlen(argv[i])>4) dwFromIP=inet_addr(&argv[i][4]); break; default: usage(argv[0]); break; } break; case 't': switch(tolower(argv[i][2])) { case 'p': if(strlen(argv[i])>4) iToPort=atoi(&argv[i][4]); break; case 'i': if(strlen(argv[i])>4) dwToIP=inet_addr(&argv[i][4]); break; default: usage(argv[0]); break; } break; case 'n': if(strlen(argv[i])>3) dwCount=atol(&argv[i][3]); break; case 'm': if(strlen(argv[i])>3) strcpy(strMessage,&argv[i][3]); break; default: usage(argv[0]); break; } } } return;}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);}int main(int argc,char **argv){WSADATA wsd;SOCKET s;BOOL bOpt;struct sockaddr_in remote;IP_HDR ipHdr;UDP_HDR udpHdr;int ret;DWORD i;unsigned short iTotalSize,iUdpSize,iUdpChecksumSize,iIPVersion,iIPSize,cksum=0;char buf[MAX_PACKET];char *ptr=NULL;IN_ADDR addr;ValidateArgs(argc,argv);addr.S_un.S_addr=dwFromIP;printf("From IP:<%s>\n Port: %d\n",inet_ntoa(addr),iFromPort);addr.S_un.S_addr=dwToIP;printf("To IP: <%s>\n Port:%d\n",inet_ntoa(addr),iToPort);printf("Message:[%s]\n",strMessage);printf("Count: %d\n",dwCount); if(WSAStartup(MAKEWORD(2,2),&wsd)!=0) { printf("WSAStartup() failed:%d\n",GetLastError()); return -1; }s=WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP,NULL,0,0); if(s==INVALID_SOCKET) { printf("WSASOCKET() failed:%d\n",WSAGetLastError()); return -1; }bOpt=TRUE;ret=setsockopt(s,IPPROTO_IP,IP_HDRINCL,(char *)&bOpt,sizeof(bOpt));if(ret==SOCKET_ERROR){printf("setsockopt(IP_HDRINCL) failed: %d\n",WSAGetLastError());return -1;}iTotalSize=sizeof(ipHdr)+sizeof(udpHdr)+strlen(strMessage);iIPVersion=4;iIPSize=sizeof(ipHdr) / sizeof(unsigned long);ipHdr.ip_verlen=(iIPVersion<<4)|iIPSize;ipHdr.ip_tos=0;ipHdr.ip_totallength=htons(iTotalSize);ipHdr.ip_id=0;ipHdr.ip_offset=0;ipHdr.ip_ttl=128;ipHdr.ip_protocol=0x11;ipHdr.ip_checksum=0;ipHdr.ip_srcaddr=dwFromIP;ipHdr.ip_destaddr=dwToIP;udpHdr.src_portno=htons(iFromPort);udpHdr.dst_portno=htons(iToPort);udpHdr.udp_length=htons(iUdpSize);udpHdr.udp_checksum=0;iUdpChecksumSize=0;ptr=buf;ZeroMemory(buf,MAX_PACKET);memcpy(ptr,&ipHdr.ip_srcaddr,sizeof(ipHdr.ip_srcaddr));ptr+=sizeof(ipHdr.ip_srcaddr);iUdpChecksumSize+=sizeof(ipHdr.ip_srcaddr);memcpy(ptr,&ipHdr.ip_destaddr,sizeof(ipHdr.ip_destaddr));ptr+=sizeof(ipHdr.ip_destaddr);iUdpChecksumSize+=sizeof(ipHdr.ip_destaddr);ptr++;iUdpChecksumSize+=1;memcpy(ptr,&ipHdr.ip_protocol,sizeof(ipHdr.ip_protocol));ptr+=sizeof(ipHdr.ip_protocol);iUdpChecksumSize+=sizeof(ipHdr.ip_protocol);memcpy(ptr,&udpHdr.udp_length,sizeof(udpHdr.udp_length));ptr+=sizeof(udpHdr.udp_length);iUdpChecksumSize+=sizeof(udpHdr.udp_length);memcpy(ptr,&udpHdr.udp_length,sizeof(udpHdr.udp_length));ptr+=sizeof(udpHdr.udp_length);iUdpChecksumSize+=sizeof(udpHdr.udp_length);memcpy(ptr,&udpHdr,sizeof(udpHdr));ptr+=sizeof(udpHdr);iUdpChecksumSize+=sizeof(udpHdr);for(i=0;i<strlen(strMessage);i++,ptr++) *ptr=strMessage[i];iUdpChecksumSize+=strlen(strMessage);cksum=checksum((USHORT *)buf,iUdpChecksumSize);udpHdr.udp_checksum=cksum;ZeroMemory(buf,MAX_PACKET);ptr=buf;memcpy(ptr,&ipHdr,sizeof(ipHdr)); ptr+=sizeof(ipHdr);memcpy(ptr,&udpHdr,sizeof(udpHdr)); ptr+=sizeof(udpHdr);memcpy(ptr,strMessage,strlen(strMessage));remote.sin_family=AF_INET;remote.sin_port=htons(iToPort);remote.sin_addr.s_addr=dwToIP;for(i=0;i<dwCount;i++){ ret=sendto(s,buf,iTotalSize,0,(SOCKADDR *)&remote,sizeof(remote)); if(ret==SOCKET_ERROR) { printf("sendto() failed:%d\n",WSAGetLastError()); break; } else printf("sEND %d bytes\n",ret);}closesocket(s);WSACleanup();return 0;} 这个是最新的,你直接可以调试通,记得在工程/设置->LINK,加WSOCK32.LIB WS2_32.LIB 这两个库! 伪造IP可以使用原始套接字。发送http请求可以参考http://community.csdn.net/Expert/topic/3641/3641113.xml?temp=.6726801 chenzunshi(石头) 我发送给主机好象都没什么反应 SendDlgItemMessage搭配char出乱码~ 关于取函数地址的问题 如何做一个一个类似魔兽warkey的工具啊!- 谁能推荐有关VC界面设计的书籍 字符串简单问题 关于线程的问题,大家过来看看啊,分不够的话,可以再加. 如何在VC中经过一个动作后改变窗口. VC.net的 Adodc用法 setup factory 请问如何判断安装目录不可为盘符根目录 那里有有关介绍ADO的资料和网站 关于CreateProcess()的问题! 如何通过程序修改本机的IP地址?
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>#define MAX_MESSAGE 4068
#define MAX_PACKET 4096#define DEFAULT_PORT 1234
#define DEFAULT_IP "127.0.0.1"
#define DEFAULT_COUNT 5
#define DEFAULT_MESSAGE "stone"typedef struct ip_hdr
{
unsigned char ip_verlen;
unsigned char ip_tos;
unsigned short ip_totallength;
unsigned short ip_id;
unsigned short ip_offset;
unsigned char ip_ttl;
unsigned char ip_protocol;
unsigned short ip_checksum;
unsigned int ip_srcaddr;
unsigned int ip_destaddr;
} IP_HDR,*PIP_HDR,FAR* LPIP_HDR;typedef struct udp_hdr
{
unsigned short src_portno;
unsigned short dst_portno;
unsigned short udp_length;
unsigned short udp_checksum;
} UDP_HDR,*PUDP_HDR;unsigned long dwToIP,dwFromIP;
unsigned short iToPort,iFromPort;
DWORD dwCount;
char strMessage[MAX_MESSAGE];void usage(char *progname)
{
printf("usage: %s [-fp:int] [-fi:str] [-tp:int] [-ti:str] [-n:int] [-m:str]\n",progname);
printf(" -fp:int From(sender) port number\n");
printf(" -fi:IP From(sender) IP address\n");
printf(" -fp:int To(recipient) port number\n");
printf(" -fi:IP To(recipient) Ip address\n");
printf(" -n:int Number of times to read message\n");
printf(" -m:str Size of buffer to read\n\n");
ExitProcess(1);
}void ValidateArgs(int argc,char **argv)
{
int i;
iToPort=DEFAULT_PORT;
iFromPort=DEFAULT_PORT;
dwToIP=inet_addr(DEFAULT_IP);
dwFromIP=inet_addr(DEFAULT_IP);
dwCount=DEFAULT_COUNT;
strcpy(strMessage,DEFAULT_MESSAGE);
for(i=1;i<argc;i++)
{
if((argv[i][0]=='-')||(argv[i][0]=='/'))
{
switch(tolower(argv[i][1]))
{
case 'f':
switch(tolower(argv[i][2]))
{
case 'p':
if(strlen(argv[i])>4)
iFromPort=atoi(&argv[i][4]);
break;
case 'i':
if(strlen(argv[i])>4)
dwFromIP=inet_addr(&argv[i][4]);
break;
default:
usage(argv[0]);
break;
}
break;
case 't':
switch(tolower(argv[i][2]))
{
case 'p':
if(strlen(argv[i])>4)
iToPort=atoi(&argv[i][4]);
break;
case 'i':
if(strlen(argv[i])>4)
dwToIP=inet_addr(&argv[i][4]);
break;
default:
usage(argv[0]);
break;
}
break;
case 'n':
if(strlen(argv[i])>3)
dwCount=atol(&argv[i][3]);
break;
case 'm':
if(strlen(argv[i])>3)
strcpy(strMessage,&argv[i][3]);
break;
default:
usage(argv[0]);
break;
}
}
}
return;
}
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);}
int main(int argc,char **argv)
{
WSADATA wsd;
SOCKET s;
BOOL bOpt;
struct sockaddr_in remote;
IP_HDR ipHdr;
UDP_HDR udpHdr;
int ret;
DWORD i;unsigned short iTotalSize,iUdpSize,iUdpChecksumSize,iIPVersion,iIPSize,cksum=0;
char buf[MAX_PACKET];
char *ptr=NULL;
IN_ADDR addr;ValidateArgs(argc,argv);
addr.S_un.S_addr=dwFromIP;
printf("From IP:<%s>\n Port: %d\n",inet_ntoa(addr),iFromPort);
addr.S_un.S_addr=dwToIP;
printf("To IP: <%s>\n Port:%d\n",inet_ntoa(addr),iToPort);
printf("Message:[%s]\n",strMessage);
printf("Count: %d\n",dwCount);
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
printf("WSAStartup() failed:%d\n",GetLastError());
return -1;
}
s=WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP,NULL,0,0);
if(s==INVALID_SOCKET)
{
printf("WSASOCKET() failed:%d\n",WSAGetLastError());
return -1; }bOpt=TRUE;
ret=setsockopt(s,IPPROTO_IP,IP_HDRINCL,(char *)&bOpt,sizeof(bOpt));
if(ret==SOCKET_ERROR)
{
printf("setsockopt(IP_HDRINCL) failed: %d\n",WSAGetLastError());
return -1;
}iTotalSize=sizeof(ipHdr)+sizeof(udpHdr)+strlen(strMessage);
iIPVersion=4;
iIPSize=sizeof(ipHdr) / sizeof(unsigned long);ipHdr.ip_verlen=(iIPVersion<<4)|iIPSize;
ipHdr.ip_tos=0;
ipHdr.ip_totallength=htons(iTotalSize);
ipHdr.ip_id=0;
ipHdr.ip_offset=0;
ipHdr.ip_ttl=128;
ipHdr.ip_protocol=0x11;
ipHdr.ip_checksum=0;
ipHdr.ip_srcaddr=dwFromIP;
ipHdr.ip_destaddr=dwToIP;udpHdr.src_portno=htons(iFromPort);
udpHdr.dst_portno=htons(iToPort);
udpHdr.udp_length=htons(iUdpSize);
udpHdr.udp_checksum=0;iUdpChecksumSize=0;
ptr=buf;
ZeroMemory(buf,MAX_PACKET);memcpy(ptr,&ipHdr.ip_srcaddr,sizeof(ipHdr.ip_srcaddr));
ptr+=sizeof(ipHdr.ip_srcaddr);
iUdpChecksumSize+=sizeof(ipHdr.ip_srcaddr);memcpy(ptr,&ipHdr.ip_destaddr,sizeof(ipHdr.ip_destaddr));
ptr+=sizeof(ipHdr.ip_destaddr);
iUdpChecksumSize+=sizeof(ipHdr.ip_destaddr);ptr++;
iUdpChecksumSize+=1;memcpy(ptr,&ipHdr.ip_protocol,sizeof(ipHdr.ip_protocol));
ptr+=sizeof(ipHdr.ip_protocol);
iUdpChecksumSize+=sizeof(ipHdr.ip_protocol);memcpy(ptr,&udpHdr.udp_length,sizeof(udpHdr.udp_length));
ptr+=sizeof(udpHdr.udp_length);
iUdpChecksumSize+=sizeof(udpHdr.udp_length);memcpy(ptr,&udpHdr.udp_length,sizeof(udpHdr.udp_length));
ptr+=sizeof(udpHdr.udp_length);
iUdpChecksumSize+=sizeof(udpHdr.udp_length);memcpy(ptr,&udpHdr,sizeof(udpHdr));
ptr+=sizeof(udpHdr);
iUdpChecksumSize+=sizeof(udpHdr);for(i=0;i<strlen(strMessage);i++,ptr++)
*ptr=strMessage[i];
iUdpChecksumSize+=strlen(strMessage);
cksum=checksum((USHORT *)buf,iUdpChecksumSize);
udpHdr.udp_checksum=cksum;ZeroMemory(buf,MAX_PACKET);
ptr=buf;memcpy(ptr,&ipHdr,sizeof(ipHdr)); ptr+=sizeof(ipHdr);
memcpy(ptr,&udpHdr,sizeof(udpHdr)); ptr+=sizeof(udpHdr);
memcpy(ptr,strMessage,strlen(strMessage));remote.sin_family=AF_INET;
remote.sin_port=htons(iToPort);
remote.sin_addr.s_addr=dwToIP;for(i=0;i<dwCount;i++)
{
ret=sendto(s,buf,iTotalSize,0,(SOCKADDR *)&remote,sizeof(remote));
if(ret==SOCKET_ERROR)
{
printf("sendto() failed:%d\n",WSAGetLastError());
break;
}
else
printf("sEND %d bytes\n",ret);
}
closesocket(s);
WSACleanup();
return 0;
}
http://community.csdn.net/Expert/topic/3641/3641113.xml?temp=.6726801
我发送给主机好象都没什么反应