请问谁有伪装数据包向web服务器发送请求的源代码?

webnumen 2004-12-15 12:50:41
该伪装数据包能够伪装假的本地ip地址,向web服务器发送http请求,谁有这样的源代码,如果有,可以送上200分
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
webnumen 2004-12-17
  • 打赏
  • 举报
回复
chenzunshi(石头)
我发送给主机好象都没什么反应
kingzai 2004-12-15
  • 打赏
  • 举报
回复
伪造IP可以使用原始套接字。发送http请求可以参考
http://community.csdn.net/Expert/topic/3641/3641113.xml?temp=.6726801
webnumen 2004-12-15
  • 打赏
  • 举报
回复
里面好像要用到udp广播??
chenzunshi 2004-12-15
  • 打赏
  • 举报
回复
这个是最新的,你直接可以调试通,记得在工程/设置->LINK,加WSOCK32.LIB WS2_32.LIB 这两个库!
chenzunshi 2004-12-15
  • 打赏
  • 举报
回复
#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;
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧