Dear Loris,
This is the suggested code at your disposal. Please feel
free to add change accordingly.
Look at note about the wszName. Its different on machine
to machine and 98/me . So I guess the alldevs has to be developed as to
send index or description of MIB_IFROW.cuz thats the only correct info
always.
Jahan
-----
Aftab Jahan Subedar (Mr)
Software Engineer/Overseas Business Development Manager
Suvastu Software Ltd.
Suvastu Tower
69/1 Pathapath Green Road
Dhaka 1205
Bangladesh
sms:++447765341890
/*****3a03->jahan begin patch requires VC6 SP5*******************/
#include <ws2tcpip.h>
#include <iprtrmib.h>
typedef DWORD (CALLBACK* _fpGetIfTable_)(PMIB_IFTABLE, PULONG, BOOL);
/*add lib ws2_32.lib in your project/settings/link/"object/library
modules"*/
//includes loopback
BOOLEAN PacketGetAdapterNames(PTSTR pStr,
PULONG BufferSize)
{
HINSTANCE m_hIpHandler = NULL;
_fpGetIfTable_ IfConfig;
ULONG m_ulBufferSize;
LPSTR m_lpstrBuffer;
DWORD m_dwRVal;
DWORD m_dwIfCnt;
MIB_IFTABLE *IfTableConfig;
MIB_IFROW *Interface;
DWORD m_dwLoopCnt;
UINT m_dwLoopCnt2;
/*jahan->init ip helper*/
m_hIpHandler = LoadLibrary("iphlpapi.dll");
if (m_hIpHandler == NULL)
{
return FALSE;
}
/*jahan->get GetIfTable: The GetIfTable function retrieves the MIB-II
interface table.*/
IfConfig = (_fpGetIfTable_) GetProcAddress(m_hIpHandler, "GetIfTable");
if (IfConfig == NULL)
{
return FALSE;
}
/*jahan->ask buffer size by setting zero*/
m_ulBufferSize = 0;
m_dwRVal = (*IfConfig)((PMIB_IFTABLE) m_lpstrBuffer, &m_ulBufferSize,
TRUE);
/* jahan-> warning C4700: local variable 'm_lpstrBuffer' used without
having been initialized
we know that . we r sending only for syntax . further more its
for initializing
*/
if (m_dwRVal != ERROR_INSUFFICIENT_BUFFER)
{
FreeLibrary(m_hIpHandler); /* jahan->ethically correct izznt it?*/
return FALSE;
}
/* jahan->got size now alloc mem ? GlobalAlloc?*/
m_lpstrBuffer = (char *) malloc(m_ulBufferSize);
if (m_lpstrBuffer == NULL)
{
return FALSE;
}
m_dwRVal = (*IfConfig)((PMIB_IFTABLE) m_lpstrBuffer, &m_ulBufferSize,
TRUE);
if (m_dwRVal != NO_ERROR)
{
FreeLibrary(m_hIpHandler); /* jahan->ethically correct izznt it?*/
return FALSE;
}
IfTableConfig = (MIB_IFTABLE *) m_lpstrBuffer; /* jahan->gotcha
tables names */
m_dwIfCnt=IfTableConfig->dwNumEntries;/*jahan-> number of interfaces */
/****************
jahan->IfTableConfig->table->
>>see MIB_IFROW def
Interface=IfTableConfig->table;
Interface->wszName does not show up dunno why
so the only option open is using the ->dwIndex or ->bDescr
up to u
for(DWORD i=0;i<m_dwIfCnt;i++)
{
Interface = (Interface->table) + i;
ODS(Interface->bDescr);
ODS(Interface->wszName); does not show up dunno why
***********************************************************************
***********************************************************************
** add to the return string, dun wanna touch the oid oid
area**
***********************************************************************
***********************************************************************
}
******************/
for(m_dwLoopCnt=0;m_dwLoopCnt<m_dwIfCnt;m_dwLoopCnt++)
{
Interface = (IfTableConfig->table) + m_dwLoopCnt;
ODS("--------------------------------\n");
ODSEx("Interface Number %u\n", m_dwLoopCnt);
if (*(Interface->wszName) == 0)
{
ODS("Dunno gone where");
}
else
ODSEx("Name: %S", Interface->wszName);
ODS("\n");
ODSEx("index of the interface: %u\n", Interface->dwIndex);
ODSEx("Type of interface: %u\n", Interface->dwType);
ODSEx("MTU: %u\n", Interface->dwMtu);
ODSEx("Speed of the interface: %u\n", Interface->dwSpeed);
ODSEx("Length of physical address: %u\n", Interface->dwPhysAddrLen);
ODS("Physical address of adapter:");
for (m_dwLoopCnt2= 0; m_dwLoopCnt2 < Interface->dwPhysAddrLen;
m_dwLoopCnt2++)
{
ODSEx(" %02x", Interface->bPhysAddr[m_dwLoopCnt2]);
}
ODS("\n");
ODSEx("Administrative status: %u\n", Interface->dwAdminStatus);
ODSEx("Operational status: %u\n", Interface->dwOperStatus);
ODSEx("Last time operational status changed: %u\n",
Interface->dwLastChange);
ODSEx("Octets received: %u\n", ifr->dwInOctets);
ODSEx("Unicast packets received: %u\n", Interface->dwInUcastPkts);
ODSEx("Non-unicast packets received: %u\n", Interface->dwInNUcastPkts);
ODSEx("Received packets discarded: %u\n", Interface->dwInDiscards);
ODSEx("Erroneous packets received: %u\n", Interface->dwInErrors);
ODSEx("Unknown protocol packets received:
%u\n",Interface->dwInUnknownProtos);
ODSEx("Octets sent: %u\n", Interface->dwOutOctets);
ODSEx("Unicast packets sent: %u\n", Interface->dwOutUcastPkts);
ODSEx("Non-unicast packets sent: %u\n", Interface->dwOutNUcastPkts);
ODSEx("Outgoing packets discarded: %u\n", Interface->dwOutDiscards);
ODSEx("Erroneous packets sent: %u\n", Interface->dwOutErrors);
ODSEx("Output queue length: %u\n", Interface->dwOutQLen);
ODSEx("Length of bDescr member: %u\n", Interface->dwDescrLen);
ODSEx("Interface description: %s\n", Interface->bDescr);
}
ODS("--------------------------------\n");
free(m_lpstrBuffer);
FreeLibrary(m_hIpHandler);
return TRUE;
}
//---------------------------------------------------------------------------
//Version: Requires Windows Sockets 2.0.
// Header: Declared in Winsock2.h.
// Library: Use Ws2_32.lib.
// includes loop back
BOOLEAN PacketGetNetInfoJHN(LPTSTR AdapterName, PULONG netp, PULONG maskp)
{
SOCKET sock = INVALID_SOCKET;
INTERFACE_INFO *interface_info;
WORD wVersionRequested;
WSADATA wsaData;
int m_intRval;
char addresses[5000];
DWORD cbBytesReturned;
DWORD count;
DWORD loopCount;
//start the 2.2 winsock
wVersionRequested = MAKEWORD(2, 2);
m_intRval = WSAStartup(wVersionRequested, &wsaData);
if (m_intRval != 0)
{
return FALSE;
}
sock = WSASocket(PF_INET, SOCK_RAW, AF_INET, 0, 0, 0);
if (sock == INVALID_SOCKET)
{
return FALSE;
}
memset(addresses, 0, 5000);
m_intRval = WSAIoctl(sock,
SIO_GET_INTERFACE_LIST,
NULL,
0,
(void *) addresses,
5000,
&cbBytesReturned,
0,
0);
if (m_intRval)
{
return FALSE;
}
count = cbBytesReturned / sizeof(INTERFACE_INFO);
ODSEx("\n\nNumber of IP interfaces on this machine: %d\n", count);
ODS("Details as follows:\n");
for (loopCount = 0; loopCount < count ; loopCount++)
{
interface_info = ((INTERFACE_INFO *) addresses) + loopCount;
ODS("--------------------------------\n");
ODSEx("IP interface number %d\n", ii+1);
ODS("\nAddress details:\n");
ODSEx("==== %d.%d.%d.%d====\n",
(&(interface_info->iiAddress))->AddressIn.sin_addr.S_un.S_un_b.s_b1,
(&(interface_info->iiAddress))->AddressIn.sin_addr.S_un.S_un_b.s_b2,
(&(interface_info->iiAddress))->AddressIn.sin_addr.S_un.S_un_b.s_b3,
(&(interface_info->iiAddress))->AddressIn.sin_addr.S_un.S_un_b.s_b4);
ODS("\n");
ODS("Broadcast address details:\n");
ODSEx("==== %d.%d.%d.%d====\n",
(&(interface_info->iiBroadcastAddress))->AddressIn.sin_addr.S_un.S_un_b.s_b1,
(&(interface_info->iiBroadcastAddress))->AddressIn.sin_addr.S_un.S_un_b.s_b2,
(&(interface_info->iiBroadcastAddress))->AddressIn.sin_addr.S_un.S_un_b.s_b3,
(&(interface_info->iiBroadcastAddress))->AddressIn.sin_addr.S_un.S_un_b.s_b4);
ODS("\n");
ODS("Netmask details:\n");
ODSEx("==== %d.%d.%d.%d====\n",
(&(interface_info->iiNetmask))->AddressIn.sin_addr.S_un.S_un_b.s_b1,
(&(interface_info->iiNetmask))->AddressIn.sin_addr.S_un.S_un_b.s_b2,
(&(interface_info->iiNetmask))->AddressIn.sin_addr.S_un.S_un_b.s_b3,
(&(interface_info->iiNetmask))->AddressIn.sin_addr.S_un.S_un_b.s_b4);
ODS("\n");
ODS("The following status flags apply to this IP interface:\n");
if (interface_info->iiFlags & IFF_UP)
{
ODS(" The interface is running.\n");
}
if (interface_info->iiFlags & IFF_BROADCAST)
{
ODS(" The broadcast feature is supported.\n");
}
if (interface_info->iiFlags & IFF_LOOPBACK)
{
ODS(" The loopback interface is running.\n");
}
if (interface_info->iiFlags & IFF_POINTTOPOINT)
{
ODS(" The interface is using point-to-point link.\n");
}
if (interface_info->iiFlags & IFF_MULTICAST)
{
ODS(" The multicast feature is supported.\n");
}
}
ODS("--------------------------------\n");
closesocket(sock);
return TRUE;
}
/*****3a03->jahan end of patch*******************/
Aftab Jahan Subedar wrote:
> Ok I m working on it. arredy. c u soon.
>
> Loris Degioanni wrote:
>
>> The bug seems to be in the way WinPcap parses the registry under Win9x.
>> The problem is:
>> - the way Win9x stores information about the adapters in the registry is
>> weird, complex and not well documented
>> - I and the rest of the winpcap team do no more support Win9x
>> actively. We
>> have limited resources and we prefer to allocate them on the WinNTx
>> version.
>>
>> The consequence is that I will not be able to address this bug in the
>> short
>> period, unless I receive a patch that solves it.
>>
>> Loris
>>
>>
>>> Hey I did not notice, its you!!! cuz I read your Italian presentation
>>> nearly every hour or call to the functions. Hey thanks again, saved lots
>>> of hair. I was about to reinvent the cycly when i came accross your lib.
>>> great. thanks again.( will try to convert the thanks to .....)
>>>
>>> The problem was not there. the problem in GetNetInfoEx. i mimic the
>>> calls and found the same wrong result.
>>>
>>>
>>> The following are the result of dry run:
>>>
>>> Lets look for "SISNIC"
>>>
>>> First call for the key SYSTEM\\CurrentControlSet\\Services\\class\\net
>>>
>>> IIndex=0 != "SISNIC"
>>>
>>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0000]
>>> ....
>>>
>>>
>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0000\NDIS]
>>
>>
>>> "MajorNdisVersion"=hex:04
>>> "MinorNdisVersion"=hex:00
>>> "LogDriverName"="*PNP0510"
>>>
>>>
>>> IIndex=1 != "SISNIC"
>>>
>>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0001]
>>> ....
>>>
>>>
>>>
>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0001\NDIS]
>>
>>
>>> "MajorNdisVersion"=hex:03
>>> "MinorNdisVersion"=hex:0a
>>> "LogDriverName"="NIC1394"
>>>
>>> IIndex=2 != "SISNIC"
>>>
>>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0002]
>>> ....
>>>
>>> IIndex=2 != "SISNIC"
>>>
>>>
>>>
>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0002\NDIS]
>>
>>
>>> "LogDriverName"="PPPMAC"
>>> "MajorNdisVersion"=hex:03
>>> "MinorNdisVersion"=hex:0a
>>>
>>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0003]
>>> ....
>>>
>>> IIndex=3 != "SISNIC"
>>>
>>>
>>>
>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0003\NDIS]
>>
>>
>>> "LogDriverName"="pptp"
>>> "MajorNdisVersion"="03"
>>> "MinorNdisVersion"="0A"
>>>
>>>
>>>
>> [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\\0004\NDIS]
>>
>>
>>> "LogDriverName"="SISNIC"
>>> "MajorNdisVersion"=hex:03
>>> "MinorNdisVersion"=hex:0a
>>>
>>> IIndex=4 Heyyyyyy this one so the index is 4
>>>
>>>
>>> now let look at [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP]
>>>
>>> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0000]
>>> "Class"="NetTrans"
>>> "Driver"="NetTrans\\0001"
>>> "MasterCopy"="Enum\\Network\\MSTCP\\0000"
>>> "DeviceDesc"="TCP/IP"
>>> "CompatibleIDs"="MSTCP"
>>> "Mfg"="Microsoft"
>>> "ClassGUID"="{4d36e975-e325-11ce-bfc1-08002be10318}"
>>> "ConfigFlags"=hex:10,00,00,00
>>> "Capabilities"=hex:14,00,00,00
>>>
>>> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0000\Bindings]
>>> "VREDIR\\0000"=""
>>>
>>> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0001]
>>> "Class"="NetTrans"
>>> "Driver"="NetTrans\\0002"
>>> "MasterCopy"="Enum\\Network\\MSTCP\\0001"
>>> "DeviceDesc"="TCP/IP"
>>> "CompatibleIDs"="MSTCP"
>>> "Mfg"="Microsoft"
>>> "ClassGUID"="{4d36e975-e325-11ce-bfc1-08002be10318}"
>>> "ConfigFlags"=hex:10,00,00,00
>>> "Capabilities"=hex:14,00,00,00
>>>
>>> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0001\Bindings]
>>> "VREDIR\\0001"=""
>>>
>>> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0002]
>>> "Class"="NetTrans"
>>> "ClassGUID"="{4d36e975-e325-11ce-bfc1-08002be10318}"
>>> "Driver"="NetTrans\\0004"
>>> "MasterCopy"="Enum\\Network\\MSTCP\\0002"
>>> "DeviceDesc"="TCP/IP"
>>> "CompatibleIDs"="MSTCP"
>>> "Mfg"="Microsoft"
>>> "ConfigFlags"=hex:10,00,00,00
>>> "Capabilities"=hex:14,00,00,00
>>>
>>> [HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0002\Bindings]
>>> "VREDIR\\0002"=""
>>>
>>> oops IINDEX 4 not up there so GetNetInfoEx returns FALSE
>>>
>>> so i made the changes for now for my ongoing project ( hey wanna know
>>> for waat?)
>>>
>>>
>>> this is the change I made for now in my WINME+autoupdate feature ( dont
>>> know what Microsoft updates automatically , did not check the
>>> logs)enabled box.
>>> //begining of w30a3->jhn
>>> WORD wVersionRequested;
>>> WSADATA wsaData;
>>> struct hostent* h;
>>> char szBuff[80];
>>> LPIN_ADDR p;
>>>
>>> if(gethostname(szBuff, 79))
>>> { wVersionRequested = MAKEWORD( 1, 1);
>>> if(WSAStartup( wVersionRequested, &wsaData )!=0) return FALSE;
>>> }
>>>
>>> h=gethostbyname(szBuff);
>>>
>>> p=(LPIN_ADDR)h->h_addr_list[0];
>>> strncpy(String,inet_ntoa(*p),16);//ipv4 only
>>>
>>> StringPos = 0;
>>> BufLen = sizeof String;
>>>
>>> for(naddrs = 0;naddrs < *NEntries;naddrs++){
>>> TmpAddr = (struct sockaddr_in *) &(buffer[naddrs].IPAddress);
>>>
>>> if((TmpAddr->sin_addr.S_un.S_addr = inet_addrU(String + StringPos))!=
>>> -1){
>>> TmpAddr->sin_family = AF_INET;
>>>
>>> TmpBroad = (struct sockaddr_in *) &(buffer[naddrs].Broadcast);
>>> TmpBroad->sin_family = AF_INET;
>>> // Don't know where to find the broadcast adrr under Win9x, default to
>>> 255.255.255.255
>>> TmpBroad->sin_addr.S_un.S_addr = 0x00ffffff & p->S_un.S_addr;
>>> TmpBroad->sin_addr.S_un.S_addr |=0xff000000;
>>>
>>> while(*(String + StringPos) != '\0' && *(String + StringPos) !=
>>> ',')StringPos++;
>>> StringPos++;
>>>
>>> if(*(String + StringPos) == 0 || StringPos >= BufLen)
>>> break;
>>> }
>>> else break;
>>> }
>>>
>>> BufLen = sizeof String;
>>> // Open the key with the addresses
>>> // scan the key to obtain the masks
>>> strcpy(String,"255.255.255.0");
>>> StringPos = 0;
>>> for(nmasks = 0;nmasks <* NEntries;nmasks++){
>>> TmpAddr = (struct sockaddr_in *) &(buffer[nmasks].SubnetMask);
>>>
>>> if((TmpAddr->sin_addr.S_un.S_addr = inet_addrU(String + StringPos))!=
>>> -1){
>>> TmpAddr->sin_family = AF_INET;
>>>
>>> while(*(String + StringPos) != '\0' && *(String + StringPos) !=
>>> ',')StringPos++;
>>> StringPos++;
>>>
>>> if(*(String + StringPos) == 0 || StringPos >= BufLen)
>>> break;
>>> }
>>> else break;
>>> }
>>>
>>> *NEntries = 1;
>>>
>>> return TRUE;
>>>
>>> //end of w30a3->jhn
>>>
>>>
>>> // Reach the class\net registry key
>>>
>>>
>> status=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\
>>
>> \class\\net",0,KEY_READ,&InterfaceKey);
>>
>>> if (status != ERROR_SUCCESS) return FALSE;
>>>
>>> ..............
>>>
>>>
>>> Now ok. its not solution of course. its just enables running properly in
>>> win me, for me.
>>>
>>> I was talking about the SNMP and INETMIB1.DLL. its in the windows core
>>>
>> sdk.
>>
>>>
>>> Aftab Jahan Subedar
>>> Software Engineer/Overseas Business Development Manager
>>> Suvastu Software Ltd.
>>> Suvastu Tower
>>> 69/1 Pathapath Green Road
>>> Dhaka 1205
>>> Bangladesh
>>> sms:++447765341890
>>>
>>>
>>>
>>> Loris Degioanni wrote:
>>>
>>>
>>>> Hi,
>>>>
>>>>
>>>>
>>>>
>>>>> hi all,
>>>>>
>>>>> cuz the add_or_find_if could not open does not mean failure.
>>>>>
>>>>> izzit better this way in the follwoing function ?
>>>>>
>>>>>
>>>>>
>>>>> static int
>>>>> pcap_add_if_win32(pcap_if_t **devlist, char *name, const char *desc,
>>>>> char *errbuf)
>>>>> {
>>>>> pcap_if_t *curdev;
>>>>> npf_if_addr if_addrs[16];
>>>>> LONG if_addr_size;
>>>>> int res = 0;
>>>>> struct sockaddr_in *addr, *netmask;
>>>>>
>>>>> if_addr_size = 16;
>>>>>
>>>>> /*
>>>>> * Add an entry for this interfacwe, with no addresses.
>>>>> */
>>>>> /*
>>>>> if (add_or_find_if(&curdev, devlist, (char *)name, 0, (char *)desc,
>>>>> errbuf) == -1) {
>>>>>
>>>>> wcap30a3 -> jhn
>>>>> */
>>>>> curdev=NULL;
>>>>> if (add_or_find_if(&curdev, devlist, (char *)name, 0, (char *)desc,
>>>>> errbuf) == -1 ) {
>>>>> /*
>>>>> * Failure.
>>>>> */
>>>>> /*
>>>>> return (-1);
>>>>> wcap30a3 -> jhn
>>>>> */
>>>>> if(curdev==NULL)
>>>>> return (0); //did not add but error!! see add_or_find_if
>>>>> else
>>>>> return (-1);
>>>>> }
>>>>>
>>>>>
>>>> Yes, you are rigth, but consider that all the interfaces received by
>>>> pcap_add_if_win32() can be opened. The reason is that the list of
>>>>
>> adapters
>>
>>>> is obtained in pcap_findalldevs() by means of the
>>>>
>> PacketGetAdapterNames()
>>
>>>> packet.dll function. This function returns only the adapters that it's
>>>> actually able to open.
>>>> Therefore, the check that you propose should not be necessary, because
>>>>
>> the
>>
>>>> call to pcap_open_live() inside add_or_find_if() will always succeed.
>>>>
>>>> However, does this patch solve your problem?
>>>>
>>>>
>>>>
>>>>> Izzit asso something wrong with PacketGetNetInfoEx/should use mib?
>>>>> manually checked the registry , it does not map, or enum does not
>>>>> contain desired index. ( removed the NICs and reinstalled-> Nada)
>>>>>
>>>>>
>>>> What do you mean by 'mib'?
>>>>
>>>> Loris
>>>>
>>>>
>>>>
>>>>> Aftab Jahan Subedar
>>>>> Software Engineer/Overseas Business Development Manager
>>>>> Suvastu Software
>>>>> Suvastu Tower
>>>>> 69/1 Pathapath Green Road
>>>>> Dhaka 1205
>>>>> Bangladesh
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ==================================================================
>>>>> This is the WinPcap users list. It is archived at
>>>>> http://www.mail-archive.com/[email protected]/
>>>>>
>>>>> To unsubscribe use
>>>>> mailto: [EMAIL PROTECTED]?body=unsubscribe
>>>>> ==================================================================
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> ==================================================================
>>>> This is the WinPcap users list. It is archived at
>>>> http://www.mail-archive.com/[email protected]/
>>>>
>>>> To unsubscribe use
>>>> mailto: [EMAIL PROTECTED]?body=unsubscribe
>>>> ==================================================================
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> ==================================================================
>>> This is the WinPcap users list. It is archived at
>>> http://www.mail-archive.com/[email protected]/
>>>
>>> To unsubscribe use
>>> mailto: [EMAIL PROTECTED]?body=unsubscribe
>>> ==================================================================
>>>
>>
>>
>>
>>
>> ==================================================================
>> This is the WinPcap users list. It is archived at
>> http://www.mail-archive.com/[email protected]/
>>
>> To unsubscribe use mailto:
>> [EMAIL PROTECTED]?body=unsubscribe
>> ==================================================================
>>
>>
>>
>
>
>
>
> ==================================================================
> This is the WinPcap users list. It is archived at
> http://www.mail-archive.com/[email protected]/
>
> To unsubscribe use mailto:
> [EMAIL PROTECTED]?body=unsubscribe
> ==================================================================
>
>
==================================================================
This is the WinPcap users list. It is archived at
http://www.mail-archive.com/[email protected]/
To unsubscribe use
mailto: [EMAIL PROTECTED]?body=unsubscribe
==================================================================