Refactor
:my
=>
'code'
Codes
Refactorings
Popular
Best
Submit
Spam
Account
Logout
Login
JavaScript doesn't seem to be activated, expect things to be ugly and sloppy!
More Jobs
Recent
brute-force password cracker
Highlight Selected forms, Set default vaues, Rails, JS, Lowpro
nested array to set of html anchor tags
Prime or Not
Open hours grouping
Search nested hash
Search with fulltext, ago-condition and category
Permutation of values
Drop all Indexes in SQL Server
Simple For Loop
Popular
Small Javascript Code
Simple For Loop
Drop all Indexes in SQL Server
Permutation of values
Search with fulltext, ago-condition and category
Prime or Not
Highlight Selected forms, Set default vaues, Rails, JS, Lowpro
nested array to set of html anchor tags
Parsing non-delimited text
Toggle "Check all / Uncheck all" with jQuery
Pastable version of
Sniffer base
<div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235</pre> <pre class="sunburst"><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">/*</span></span> <span style="color:#AEAEAE;font-style:italic;"> * Sniffer base</span> <span style="color:#AEAEAE;font-style:italic;"> * by Gnix <gnixmail@gmail.com></span> <span style="color:#AEAEAE;font-style:italic;"> * http://gnix.netsons.org</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">*/</span></span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>stdio.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Standard I/O</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>stdlib.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Standard Library</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>string.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> String functions</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>unistd.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Standard Unix</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>errno.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Gestione errori</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>net/if.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Contiene la struttura ifreq e la costante simbolica IF_NAMESIZE</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>sys/ioctl.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> ioctl</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>sys/socket.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Socket functions</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>linux/if_packet.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Contiene la struttura sockaddr_ll</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>linux/if_ether.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Contiene la costante simbolica ETH_P_IP</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>linux/ip.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Contiene la struttura iphdr</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>linux/tcp.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Contiene la struttura tcphdr</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>linux/udp.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Contiene la struttura udphdr</span> <span style="color:#8996A8;">#<span style="color:#AFC4DB;">include</span> <span style="color:#65B042;"><span style="color:#65B042;"><</span>netinet/in.h<span style="color:#65B042;">></span></span> </span><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Contiene la costante simbolica IPPROTO_TCP</span> #<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">STAT</span>(<span style="color:#3E87E3;">x</span>) ((x)) ? <span style="color:#3387CC;">1</span> : <span style="color:#3387CC;">0</span> #<span style="color:#E28964;">define</span> <span style="color:#89BDFF;">BUFFER_SIZE</span> <span style="color:#3387CC;">2048</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Crea un raw socket</span> <span style="color:#99CF50;">int</span> <span style="color:#89BDFF;">raw_sock<span style="color:#89BDFF;">et</span></span>(<span style="color:#99CF50;">int</span> protocol) { <span style="color:#99CF50;">int</span> rawsock; <span style="color:#E28964;">if</span>((rawsock = socket(PF_PACKET, SOCK_RAW, htons(protocol)))== -<span style="color:#3387CC;">1</span>) { <span style="color:#DAD085;">perror</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>Error creating raw socket: <span style="color:#65B042;">"</span></span>); <span style="color:#DAD085;">exit</span>(-<span style="color:#3387CC;">1</span>); } <span style="color:#E28964;">return</span> rawsock; } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Collega il raw socket a una data interfaccia. L'interfaccia e' gestita</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> come un semplice numero dal Kernel. Questo numero viene ricavato con la</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> chiamata a ioctl.</span> <span style="color:#99CF50;">int</span> <span style="color:#89BDFF;">raw_bi<span style="color:#89BDFF;">nd</span></span>(<span style="color:#99CF50;">char</span> *device, <span style="color:#99CF50;">int</span> rawsock, <span style="color:#99CF50;">int</span> protocol) { <span style="color:#99CF50;">struct</span> sockaddr_ll sll; <span style="color:#99CF50;">struct</span> ifreq ifr; bzero(&sll, <span style="color:#E28964;">sizeof</span>(sll)); bzero(&ifr, <span style="color:#E28964;">sizeof</span>(ifr)); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Ricava l'interface index</span> <span style="color:#DAD085;">strncpy</span>((<span style="color:#99CF50;">char</span> *)ifr.ifr_name, device, IFNAMSIZ); <span style="color:#E28964;">if</span>((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -<span style="color:#3387CC;">1</span>) { <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>Error getting Interface index !<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); <span style="color:#DAD085;">exit</span>(-<span style="color:#3387CC;">1</span>); } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Popola struttura sll e fai bind</span> sll.sll_family = AF_PACKET; sll.sll_ifindex = ifr.ifr_ifindex; sll.sll_protocol = htons(protocol); <span style="color:#E28964;">if</span>((bind(rawsock, (<span style="color:#99CF50;">struct</span> sockaddr *)&sll, <span style="color:#E28964;">sizeof</span>(sll)))== -<span style="color:#3387CC;">1</span>) { <span style="color:#DAD085;">perror</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>Error binding raw socket to interface<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); <span style="color:#DAD085;">exit</span>(-<span style="color:#3387CC;">1</span>); } <span style="color:#E28964;">return</span> <span style="color:#3387CC;">0</span>; } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Stampa in esadecimale</span> <span style="color:#99CF50;">void</span> <span style="color:#89BDFF;">printH<span style="color:#89BDFF;">ex</span></span>(<span style="color:#99CF50;">char</span> *mesg, <span style="color:#99CF50;">unsigned</span> <span style="color:#99CF50;">char</span> *p, <span style="color:#99CF50;">int</span> len) { <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">%s</span><span style="color:#65B042;">"</span></span>, mesg); <span style="color:#E28964;">while</span>(len--) { <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">%.2X</span> <span style="color:#65B042;">"</span></span>, *p); p++; } <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Stampa il pachetto</span> <span style="color:#99CF50;">void</span> printPacket(<span style="color:#99CF50;">unsigned</span> <span style="color:#99CF50;">char</span> *packet, <span style="color:#99CF50;">int</span> len) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Variabili</span> <span style="color:#99CF50;">struct</span> ethhdr *ethernet_header; <span style="color:#99CF50;">struct</span> iphdr *ip_header; <span style="color:#99CF50;">struct</span> tcphdr *tcp_header; <span style="color:#99CF50;">struct</span> udphdr *udp_header; <span style="color:#99CF50;">unsigned</span> <span style="color:#99CF50;">char</span> *data; <span style="color:#99CF50;">int</span> data_len = <span style="color:#3387CC;">0</span>; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Stampa messaggio iniziale</span> <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\n</span><span style="color:#DDF2A4;">\n</span>################[ Packet Starts ]################<span style="color:#65B042;">"</span></span>); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Controlla che la dimensione del pacchetto sia maggiore degli header ethernet e ip sommati.</span> <span style="color:#E28964;">if</span>(len >= (<span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> ethhdr) + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> iphdr))) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Casting in ethhdr</span> ethernet_header = (<span style="color:#99CF50;">struct</span> ethhdr*)packet; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Stampa header ethernet</span> <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\n</span>----- Ethernet Header -----<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); printHex(<span style="color:#65B042;"><span style="color:#65B042;">"</span>ETH: Dest MAC : <span style="color:#65B042;">"</span></span>, ethernet_header->h_dest, <span style="color:#3387CC;">6</span>); printHex(<span style="color:#65B042;"><span style="color:#65B042;">"</span>ETH: Source MAC : <span style="color:#65B042;">"</span></span>, ethernet_header->h_source, <span style="color:#3387CC;">6</span>); printHex(<span style="color:#65B042;"><span style="color:#65B042;">"</span>ETH: Protocol : <span style="color:#65B042;">"</span></span>, (<span style="color:#99CF50;">void</span>*)&ethernet_header->h_proto, <span style="color:#3387CC;">2</span>); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Controlla che il protocollo sia IP</span> <span style="color:#E28964;">if</span>(ntohs(ethernet_header->h_proto) == ETH_P_IP) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Casting in iphdr</span> ip_header = (<span style="color:#99CF50;">struct</span> iphdr*)(packet + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> ethhdr)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\n</span>----- IP Header -----<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Header length : <span style="color:#DDF2A4;">%d</span> bytes<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ip_header->ihl*<span style="color:#3387CC;">4</span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Version : <span style="color:#DDF2A4;">%d</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ip_header->version); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Type of Service : <span style="color:#DDF2A4;">%d</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ip_header->tos); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Total length : <span style="color:#DDF2A4;">%d</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohs(ip_header->tot_len)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Identification : <span style="color:#DDF2A4;">%d</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohs(ip_header->id)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Flags : <span style="color:#DDF2A4;">%.2x</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, (<span style="color:#99CF50;">unsigned</span> <span style="color:#99CF50;">char</span>)((ip_header->frag_off)>><span style="color:#3387CC;">12</span>)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Fragment offset : <span style="color:#DDF2A4;">%d</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohs(ip_header->frag_off) & <span style="color:#3387CC;">0x0FFF</span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Time to live : <span style="color:#DDF2A4;">%d</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ip_header->ttl); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Protocol : <span style="color:#DDF2A4;">%d</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ip_header->protocol); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Header checksum : <span style="color:#DDF2A4;">%d</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohs(ip_header->check)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Source IP Address: <span style="color:#DDF2A4;">%s</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, inet_ntoa(ip_header->saddr)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>IP: Dest IP Address : <span style="color:#DDF2A4;">%s</span> <span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, inet_ntoa(ip_header->daddr)); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Controlla che il protocollo sia tcp e che la dimensione del pacchetto sia almeno la somma di header eth,ip e tcp</span> <span style="color:#E28964;">if</span>((ip_header->protocol == IPPROTO_TCP) && (len >= (<span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> ethhdr) + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> iphdr) + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> tcphdr)))) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Casting in tcphdr</span> tcp_header = (<span style="color:#99CF50;">struct</span> tcphdr*)(packet + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> ethhdr) + ip_header->ihl*<span style="color:#3387CC;">4</span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\n</span>----- TCP Header -----<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Source port : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohs(tcp_header->source)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Dest port : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohs(tcp_header->dest)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Sequence number : <span style="color:#DDF2A4;">%u</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohl(tcp_header->seq)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Acknowledgment number: <span style="color:#DDF2A4;">%u</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohl(tcp_header->ack_seq)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Reserved : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, tcp_header->res1); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Data offset : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, tcp_header->doff*<span style="color:#3387CC;">4</span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Flags<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: FIN : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, STAT(tcp_header->fin)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: SYN : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, STAT(tcp_header->syn)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: RST : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, STAT(tcp_header->rst)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: PSH : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, STAT(tcp_header->psh)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: ACK : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, STAT(tcp_header->ack)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: URG : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, STAT(tcp_header->urg)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: ECE : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, STAT(tcp_header->ece)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: CWR : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, STAT(tcp_header->cwr)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Window : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohs(tcp_header->window)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>TCP: Checksum : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, ntohs(tcp_header->check)); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Ricava posizione dei dati e stampa</span> data = (packet + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> ethhdr) + ip_header->ihl*<span style="color:#3387CC;">4</span> + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> tcphdr)); data_len = ntohs(ip_header->tot_len) - ip_header->ihl*<span style="color:#3387CC;">4</span> - <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> tcphdr); printHex(<span style="color:#65B042;"><span style="color:#65B042;">"</span>DATA: <span style="color:#65B042;">"</span></span>, data, data_len); } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Controlla che il protocollo sia udp e che la dimensione del pacchetto sia almeno la somma di header eth, ip e udp</span> <span style="color:#E28964;">else</span> <span style="color:#E28964;">if</span>((ip_header->protocol == IPPROTO_UDP) && (len >= (<span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> ethhdr) + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> iphdr) + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> udphdr)))) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Casting in udphdr</span> udp_header = (<span style="color:#99CF50;">struct</span> udphdr*)(packet + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> ethhdr) + ip_header->ihl*<span style="color:#3387CC;">4</span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\n</span>----- UDP Header -----<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>UDP: Source port: <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, htons(udp_header->source)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>UDP: Dest port : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, htons(udp_header->dest)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>UDP: Length : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, htons(udp_header->len)); <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>UDP: Checksum : <span style="color:#DDF2A4;">%d</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>, htons(udp_header->check)); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Ricava posizione dei dati e stampa</span> data = (packet + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> ethhdr) + ip_header->ihl*<span style="color:#3387CC;">4</span> + <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> udphdr)); data_len = ntohs(ip_header->tot_len) - ip_header->ihl*<span style="color:#3387CC;">4</span> - <span style="color:#E28964;">sizeof</span>(<span style="color:#99CF50;">struct</span> udphdr); printHex(<span style="color:#65B042;"><span style="color:#65B042;">"</span>DATA: <span style="color:#65B042;">"</span></span>, data, data_len); } <span style="color:#E28964;">else</span> { <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>Not a TCP or UDP packet.<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); } } } <span style="color:#E28964;">else</span> { <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>Packet size too small!<span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Stampa messaggio finale</span> <span style="color:#DAD085;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>################[ Packet Ends ]################<span style="color:#DDF2A4;">\n</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>); } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Programma principale</span> <span style="color:#99CF50;">int</span> <span style="color:#89BDFF;">ma<span style="color:#89BDFF;">in</span></span>(<span style="color:#99CF50;">int</span> argc, <span style="color:#99CF50;">char</span> **argv) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Variabili</span> <span style="color:#99CF50;">int</span> raw; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> raw socket descriptor</span> <span style="color:#99CF50;">unsigned</span> <span style="color:#99CF50;">char</span> buffer[BUFFER_SIZE]; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> buffer per i dati</span> <span style="color:#99CF50;">int</span> len; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> lunghezza buffer di dati ricevuto</span> <span style="color:#99CF50;">int</span> n_packets; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> numero pacchetti da sniffare</span> <span style="color:#99CF50;">struct</span> sockaddr_ll info; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> struttura utilizzata in recvfrom</span> <span style="color:#99CF50;">int</span> info_size = <span style="color:#E28964;">sizeof</span>(info); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> dimensione struttura sockaddr_ll</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> crea raw socket</span> raw = raw_socket(ETH_P_IP); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Bind socket all'interface</span> raw_bind(argv[<span style="color:#3387CC;">1</span>], raw, ETH_P_IP); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Numero pacchetti da sniffare</span> n_packets = <span style="color:#DAD085;">atoi</span>(argv[<span style="color:#3387CC;">2</span>]); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Inizia sniffing</span> <span style="color:#E28964;">while</span>(n_packets--) { <span style="color:#E28964;">if</span>((len = recvfrom(raw, buffer, BUFFER_SIZE, <span style="color:#3387CC;">0</span>, (<span style="color:#99CF50;">struct</span> sockaddr*)&info, &info_size)) == -<span style="color:#3387CC;">1</span>) { <span style="color:#DAD085;">perror</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>Recv from returned -1: <span style="color:#65B042;">"</span></span>); <span style="color:#DAD085;">exit</span>(-<span style="color:#3387CC;">1</span>); } <span style="color:#E28964;">else</span> { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Pacchetto ricevuto.</span> printPacket(buffer, len); } } <span style="color:#E28964;">return</span> <span style="color:#3387CC;">0</span>; } </pre> </div> </div> <a href="http://refactormycode.com/codes/260-sniffer-base" style="color:#fff" title="As seen on RefactorMyCode.com"><img alt="Small_logo" src="http://refactormycode.com/images/small_logo.gif" style="border:0" /></a>