⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 group__wpcap__tut2.html

📁 WinPcap V4.01技术手册
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>WinPcap: Obtaining advanced information about installed devices</title><link href="style.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.5.1 --><div class="tabs">  <ul>    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>    <li><a href="modules.html"><span>Modules</span></a></li>    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>    <li><a href="files.html"><span>Files</span></a></li>    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>  </ul></div><h1>Obtaining advanced information about installed devices</h1><table border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>Lesson 1 (<a class="el" href="group__wpcap__tut1.html">Obtaining the device list</a>) demonstrated how to get basic information (i.e. device name and description) about available adapters. Actually, WinPcap provides also other advanced information. In particular, every <a class="el" href="structpcap__if.html">pcap_if</a> structure returned by <a class="el" href="group__wpcapfunc.html#g98f36e62c95c6ad81eaa8b2bbeb8f16e">pcap_findalldevs_ex()</a> contains also a list of <a class="el" href="structpcap__addr.html">pcap_addr</a> structures, with:<ul><li>a list of addresses for that interface.</li><li>a list of netmasks (each of which corresponds to an entry in the addresses list).</li><li>a list of broadcast addresses (each of which corresponds to an entry in the addresses list).</li><li>a list of destination addresses (each of which corresponds to an entry in the addresses list).</li></ul><p>Additionally, <a class="el" href="group__wpcapfunc.html#g98f36e62c95c6ad81eaa8b2bbeb8f16e">pcap_findalldevs_ex()</a> can also return remote adapters and a list of pcap files that are located in a given local folder.<p>The following sample provides an ifprint() function that prints the complete contents of a <a class="el" href="structpcap__if.html">pcap_if</a> structure. It is invoked by the program for every entry returned by <a class="el" href="group__wpcapfunc.html#g98f36e62c95c6ad81eaa8b2bbeb8f16e">pcap_findalldevs_ex()</a>.<p><div class="fragment"><pre class="fragment"><span class="comment">/*</span><span class="comment"> * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)</span><span class="comment"> * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)</span><span class="comment"> * All rights reserved.</span><span class="comment"> *</span><span class="comment"> * Redistribution and use in source and binary forms, with or without</span><span class="comment"> * modification, are permitted provided that the following conditions</span><span class="comment"> * are met:</span><span class="comment"> *</span><span class="comment"> * 1. Redistributions of source code must retain the above copyright</span><span class="comment"> * notice, this list of conditions and the following disclaimer.</span><span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span><span class="comment"> * notice, this list of conditions and the following disclaimer in the</span><span class="comment"> * documentation and/or other materials provided with the distribution.</span><span class="comment"> * 3. Neither the name of the Politecnico di Torino, CACE Technologies </span><span class="comment"> * nor the names of its contributors may be used to endorse or promote </span><span class="comment"> * products derived from this software without specific prior written </span><span class="comment"> * permission.</span><span class="comment"> *</span><span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span><span class="comment"> * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span><span class="comment"> * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span><span class="comment"> * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span><span class="comment"> * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span><span class="comment"> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span><span class="comment"> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span><span class="comment"> * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span><span class="comment"> * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span><span class="comment"> * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span><span class="comment"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span><span class="comment"> *</span><span class="comment"> */</span><span class="preprocessor">#include "pcap.h"</span><span class="preprocessor">#ifndef WIN32</span><span class="preprocessor"></span><span class="preprocessor">    #include &lt;sys/socket.h&gt;</span><span class="preprocessor">    #include &lt;netinet/in.h&gt;</span><span class="preprocessor">#else</span><span class="preprocessor"></span><span class="preprocessor">    #include &lt;winsock.h&gt;</span><span class="preprocessor">#endif</span><span class="preprocessor"></span><span class="comment">// Function prototypes</span><span class="keywordtype">void</span> ifprint(<a class="code" href="structpcap__if.html">pcap_if_t</a> *d);<span class="keywordtype">char</span> *iptos(u_long in);<span class="keywordtype">char</span>* ip6tos(<span class="keyword">struct</span> sockaddr *sockaddr, <span class="keywordtype">char</span> *address, <span class="keywordtype">int</span> addrlen);<span class="keywordtype">int</span> main(){  <a class="code" href="structpcap__if.html">pcap_if_t</a> *alldevs;  <a class="code" href="structpcap__if.html">pcap_if_t</a> *d;  <span class="keywordtype">char</span> errbuf[<a class="code" href="group__wpcap__def.html#gcd448353957d92c98fccc29e1fc8d927">PCAP_ERRBUF_SIZE</a>+1];  <span class="keywordtype">char</span> source[<a class="code" href="group__wpcap__def.html#gcd448353957d92c98fccc29e1fc8d927">PCAP_ERRBUF_SIZE</a>+1];  printf(<span class="stringliteral">"Enter the device you want to list:\n"</span>            <span class="stringliteral">"rpcap://              ==&gt; lists interfaces in the local machine\n"</span>            <span class="stringliteral">"rpcap://hostname:port ==&gt; lists interfaces in a remote machine\n"</span>            <span class="stringliteral">"                          (rpcapd daemon must be up and running\n"</span>            <span class="stringliteral">"                           and it must accept 'null' authentication)\n"</span>            <span class="stringliteral">"file://foldername     ==&gt; lists all pcap files in the give folder\n\n"</span>            <span class="stringliteral">"Enter your choice: "</span>);  fgets(source, <a class="code" href="group__wpcap__def.html#gcd448353957d92c98fccc29e1fc8d927">PCAP_ERRBUF_SIZE</a>, stdin);  source[<a class="code" href="group__wpcap__def.html#gcd448353957d92c98fccc29e1fc8d927">PCAP_ERRBUF_SIZE</a>] = <span class="charliteral">'\0'</span>;  <span class="comment">/* Retrieve the interfaces list */</span>  <span class="keywordflow">if</span> (<a class="code" href="group__wpcapfunc.html#g98f36e62c95c6ad81eaa8b2bbeb8f16e">pcap_findalldevs_ex</a>(source, NULL, &amp;alldevs, errbuf) == -1)  {    fprintf(stderr,<span class="stringliteral">"Error in pcap_findalldevs: %s\n"</span>,errbuf);    exit(1);  }  <span class="comment">/* Scan the list printing every entry */</span>  <span class="keywordflow">for</span>(d=alldevs;d;d=d-&gt;<a class="code" href="structpcap__if.html#81508e6e4e41ca4235c8d6b51913c536">next</a>)  {    ifprint(d);  }  <a class="code" href="group__wpcapfunc.html#g346b4b0b7fd1cda4abb9a39f767dbeb1">pcap_freealldevs</a>(alldevs);  <span class="keywordflow">return</span> 1;}<span class="comment">/* Print all the available information on the given interface */</span><span class="keywordtype">void</span> ifprint(<a class="code" href="structpcap__if.html">pcap_if_t</a> *d){  <a class="code" href="structpcap__addr.html">pcap_addr_t</a> *a;  <span class="keywordtype">char</span> ip6str[128];  <span class="comment">/* Name */</span>  printf(<span class="stringliteral">"%s\n"</span>,d-&gt;<a class="code" href="structpcap__if.html#5ac083a645d964373f022d03df4849c8">name</a>);  <span class="comment">/* Description */</span>  <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structpcap__if.html#8444d6e0dfe2bbab0b5e7b24308f1559">description</a>)    printf(<span class="stringliteral">"\tDescription: %s\n"</span>,d-&gt;<a class="code" href="structpcap__if.html#8444d6e0dfe2bbab0b5e7b24308f1559">description</a>);  <span class="comment">/* Loopback Address*/</span>  printf(<span class="stringliteral">"\tLoopback: %s\n"</span>,(d-&gt;<a class="code" href="structpcap__if.html#304e038dd1326c14b31a206cbad18756">flags</a> &amp; <a class="code" href="group__wpcap__def.html#g43a6601bfd438efc02b0ba71c5439647">PCAP_IF_LOOPBACK</a>)?<span class="stringliteral">"yes"</span>:<span class="stringliteral">"no"</span>);  <span class="comment">/* IP addresses */</span>  <span class="keywordflow">for</span>(a=d-&gt;<a class="code" href="structpcap__if.html#3910004677550db6d9b09792ba3e2cca">addresses</a>;a;a=a-&gt;<a class="code" href="structpcap__addr.html#b151e8e96bdb23ae8dd8d644de561999">next</a>) {    printf(<span class="stringliteral">"\tAddress Family: #%d\n"</span>,a-&gt;<a class="code" href="structpcap__addr.html#4863f5b8767cd19fe6ea4db75456e5df">addr</a>-&gt;sa_family);      <span class="keywordflow">switch</span>(a-&gt;<a class="code" href="structpcap__addr.html#4863f5b8767cd19fe6ea4db75456e5df">addr</a>-&gt;sa_family)    {      <span class="keywordflow">case</span> AF_INET:        printf(<span class="stringliteral">"\tAddress Family Name: AF_INET\n"</span>);        <span class="keywordflow">if</span> (a-&gt;<a class="code" href="structpcap__addr.html#4863f5b8767cd19fe6ea4db75456e5df">addr</a>)          printf(<span class="stringliteral">"\tAddress: %s\n"</span>,iptos(((<span class="keyword">struct</span> sockaddr_in *)a-&gt;<a class="code" href="structpcap__addr.html#4863f5b8767cd19fe6ea4db75456e5df">addr</a>)-&gt;sin_addr.s_addr));        <span class="keywordflow">if</span> (a-&gt;<a class="code" href="structpcap__addr.html#c43963e42e4d901e55e433ab9c3ea686">netmask</a>)          printf(<span class="stringliteral">"\tNetmask: %s\n"</span>,iptos(((<span class="keyword">struct</span> sockaddr_in *)a-&gt;<a class="code" href="structpcap__addr.html#c43963e42e4d901e55e433ab9c3ea686">netmask</a>)-&gt;sin_addr.s_addr));        <span class="keywordflow">if</span> (a-&gt;<a class="code" href="structpcap__addr.html#0077647e1560caa72d457120b36c248c">broadaddr</a>)          printf(<span class="stringliteral">"\tBroadcast Address: %s\n"</span>,iptos(((<span class="keyword">struct</span> sockaddr_in *)a-&gt;<a class="code" href="structpcap__addr.html#0077647e1560caa72d457120b36c248c">broadaddr</a>)-&gt;sin_addr.s_addr));        <span class="keywordflow">if</span> (a-&gt;<a class="code" href="structpcap__addr.html#4a32e00e83d4b1b582ba9cef24a5d62a">dstaddr</a>)          printf(<span class="stringliteral">"\tDestination Address: %s\n"</span>,iptos(((<span class="keyword">struct</span> sockaddr_in *)a-&gt;<a class="code" href="structpcap__addr.html#4a32e00e83d4b1b582ba9cef24a5d62a">dstaddr</a>)-&gt;sin_addr.s_addr));        <span class="keywordflow">break</span>;      <span class="keywordflow">case</span> AF_INET6:        printf(<span class="stringliteral">"\tAddress Family Name: AF_INET6\n"</span>);        <span class="keywordflow">if</span> (a-&gt;<a class="code" href="structpcap__addr.html#4863f5b8767cd19fe6ea4db75456e5df">addr</a>)          printf(<span class="stringliteral">"\tAddress: %s\n"</span>, ip6tos(a-&gt;<a class="code" href="structpcap__addr.html#4863f5b8767cd19fe6ea4db75456e5df">addr</a>, ip6str, <span class="keyword">sizeof</span>(ip6str)));       <span class="keywordflow">break</span>;      <span class="keywordflow">default</span>:        printf(<span class="stringliteral">"\tAddress Family Name: Unknown\n"</span>);        <span class="keywordflow">break</span>;    }  }  printf(<span class="stringliteral">"\n"</span>);}<span class="comment">/* From tcptraceroute, convert a numeric IP address to a string */</span><span class="preprocessor">#define IPTOSBUFFERS    12</span><span class="preprocessor"></span><span class="keywordtype">char</span> *iptos(u_long in){    <span class="keyword">static</span> <span class="keywordtype">char</span> output[IPTOSBUFFERS][3*4+3+1];    <span class="keyword">static</span> <span class="keywordtype">short</span> which;    u_char *p;    p = (u_char *)&amp;in;    which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);    sprintf(output[which], <span class="stringliteral">"%d.%d.%d.%d"</span>, p[0], p[1], p[2], p[3]);    <span class="keywordflow">return</span> output[which];}<span class="keywordtype">char</span>* ip6tos(<span class="keyword">struct</span> sockaddr *sockaddr, <span class="keywordtype">char</span> *address, <span class="keywordtype">int</span> addrlen){    socklen_t sockaddrlen;<span class="preprocessor">    #ifdef WIN32</span><span class="preprocessor"></span>    sockaddrlen = <span class="keyword">sizeof</span>(<span class="keyword">struct </span>sockaddr_in6);<span class="preprocessor">    #else</span><span class="preprocessor"></span>    sockaddrlen = <span class="keyword">sizeof</span>(<span class="keyword">struct </span>sockaddr_storage);<span class="preprocessor">    #endif</span><span class="preprocessor"></span>    <span class="keywordflow">if</span>(getnameinfo(sockaddr,         sockaddrlen,         address,         addrlen,         NULL,         0,         NI_NUMERICHOST) != 0) address = NULL;    <span class="keywordflow">return</span> address;}</pre></div><p><a class="el" href="group__wpcap__tut1.html">&lt;&lt;&lt; Previous</a> <a class="el" href="group__wpcap__tut3.html">Next &gt;&gt;&gt;</a> <hr><p align="right"><img border="0" src="winpcap_small.gif" align="absbottom" width="91" height="27">documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2007 CACE Technologies. All rights reserved.</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -