Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2015, 21:17   #1
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
Восклицание WinPcap Собираем Данные об адаптере

Доброго времени суток Начал изучать WinPcap и решил написать простенький снифер, но столкнулся с маленькой проблемой. Не могу найти Ip Address и MAC Address адаптера. Как в чужой программе.

Пытался найти ip но все бесполезно они не правильные, Гугл тоже не обрадовал.
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.
Binary_Dll вне форума Ответить с цитированием
Старый 21.09.2015, 00:18   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,329
По умолчанию

Почему решили, что IP не правильные?
Все выглядит в порядке, судя по скриншотам.
waleri вне форума Ответить с цитированием
Старый 21.09.2015, 20:33   #3
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Почему решили, что IP не правильные?
Все выглядит в порядке, судя по скриншотам.
ну потому что у адаптера 192.168.1.2 в чужой программе это наглядно видно - там все верно, а у меня 192.168.1.0 - это не правильный IP он отличается от реального.
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.
Binary_Dll вне форума Ответить с цитированием
Старый 21.09.2015, 23:24   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,329
По умолчанию

А, виноват, не заметил отличия...
Что требуется от нас?
Я бы предположил, что вы считываете не тот параметр, но без кода это гадание на кофейной гуще.
waleri вне форума Ответить с цитированием
Старый 22.09.2015, 07:40   #5
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А, виноват, не заметил отличия...
Что требуется от нас?
Я бы предположил, что вы считываете не тот параметр, но без кода это гадание на кофейной гуще.
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <WinSock2.h>
#include "pcap.h"
//#include <Packet32.h>

#pragma resource "XPStyle.res"
#pragma hdrstop

#pragma comment(lib,"wpcap.lib");
#pragma comment(lib,"Packet.lib");
#pragma comment(lib, "ws2_32.lib");

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

char errbuf[PCAP_ERRBUF_SIZE];
pcap_if_t *d;
pcap_if_t *alldevs;
bpf_u_int32 maskp;
bpf_u_int32 netp;       /* ip */
struct in_addr ip_addr;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{


int i = 0;
        /* Retrieve the device list */
       	if(pcap_findalldevs(&alldevs, errbuf) == -1)
       	{
                MessageBox(0 , "Ошибка в pcap_findalldevs", "Error" , MB_OK);
	 	exit(0);
       	}

 /* Print the list */
    for(d = alldevs; d; d=d->next)
    {
ListView1->Items->Add();
TListItem * Item = ListView1->Items->Item[ListView1->Items->Count-1];
        ++i;
	pcap_lookupnet(d->name, &netp, &maskp, errbuf);
        ip_addr.S_un.S_addr  =  netp;
        Item->Caption = inet_ntoa(ip_addr);
if (d->description)
        Item->SubItems->Add(d->description);
        else
        Item->SubItems->Add("No description available");
Item->SubItems->Add(d->name);
    }
if(i==0) MessageBox(0 , "No interfaces found! Make sure WinPcap is installed.", "Error" , MB_OK);
}
//---------------------------------------------------------------------------
Собственно программа ищет устройства через которые можно снифать трафик с помощью функции int pcap_findalldevs(pcap_if_t **alldevs, char *errbuf); — функция,
собирающая информацию о доступных
интерфейсах, которые можно пытаться
прослушивать. Помимо интересующих нас
сетевых адаптеров, сюда попадают
всевозможные инфракрасные устройства,
параллельные порты, etc.
1)Нужно определить MAC адрес и Ip Address найденных устройств.
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.
Binary_Dll вне форума Ответить с цитированием
Старый 22.09.2015, 08:55   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,329
По умолчанию

Все правильно, эта функция так и должна работать.

Ref:
http://stackoverflow.com/questions/9...ect-ip-address
waleri вне форума Ответить с цитированием
Старый 22.09.2015, 19:43   #7
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Все правильно, эта функция так и должна работать.

Ref:
http://stackoverflow.com/questions/9...ect-ip-address
Хм... тогда как же это сделать ?)
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.
Binary_Dll вне форума Ответить с цитированием
Старый 25.09.2015, 10:34   #8
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию

Наше как выводит правильный Ip
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <WinSock2.h>
#include <iphlpapi.h>
#include "pcap.h"
//#include <Packet32.h>

#pragma resource "XPStyle.res"
#pragma hdrstop

#pragma comment(lib,"wpcap.lib");
#pragma comment(lib,"Packet.lib");
#pragma comment(lib, "ws2_32.lib");
#pragma comment(lib, "C:\Program Files (x86)\Borland\CBuilder6\Lib\Psdk\iphlpapi.lib")

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

char errbuf[PCAP_ERRBUF_SIZE];
pcap_if_t *d;
pcap_if_t *alldevs;
bpf_u_int32 maskp;
bpf_u_int32 netp;       /* ip */
struct in_addr ip_addr;
PIP_ADAPTER_INFO pAdapterInfo, pAdapter;
ULONG iAdapterInfo;
PIP_ADDR_STRING chAddr;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

iAdapterInfo = 0;
	int iErr = GetAdaptersInfo(NULL, &iAdapterInfo);
	if(iErr && (iErr != ERROR_BUFFER_OVERFLOW))
	{
		MessageBox(0, "GetAdaptersInfo failed" , "ERROR !", MB_OK);
		return;
	}

	if(!(pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, iAdapterInfo)))
	{
		MessageBox(0, "Memory allocatiom error" , "ERROR !", MB_OK);
		return;
	}

	if(GetAdaptersInfo(pAdapterInfo, &iAdapterInfo))
	{
		MessageBox(0, "GetAdaptersInfo failed" , "ERROR !", MB_OK);
		return;
	}
	pAdapter = pAdapterInfo;

byte i = 0;
        /* Retrieve the device list */
       	if(pcap_findalldevs(&alldevs, errbuf) == -1)
       	{
                MessageBox(0 , "Îøèáêà â pcap_findalldevs", "Error" , MB_OK);
	 	exit(0);
       	}
     chAddr = &(pAdapter->IpAddressList);
 /* Print the list */
    for(d = alldevs; d; d=d->next)
    {
ListView1->Items->Add();
TListItem * Item = ListView1->Items->Item[ListView1->Items->Count-1];
        ++i;


                if (chAddr)
                {
                Item->Caption = chAddr->IpAddress.String;
                chAddr = chAddr->Next;
                }

                if (d->description)
        Item->SubItems->Add(d->description);
        else
        Item->SubItems->Add("No description available");
Item->SubItems->Add(d->name);

}
if(i==0) MessageBox(0 , "No interfaces found! Make sure WinPcap is installed.", "Error" , MB_OK);
}
//---------------------------------------------------------------------------
только последний не выводит
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.
Binary_Dll вне форума Ответить с цитированием
Старый 25.09.2015, 10:47   #9
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <WinSock2.h>
#include <iphlpapi.h>
#include "pcap.h"
//#include <Packet32.h>

#pragma resource "XPStyle.res"
#pragma hdrstop

#pragma comment(lib,"wpcap.lib");
#pragma comment(lib,"Packet.lib");
#pragma comment(lib, "ws2_32.lib");
#pragma comment(lib, "C:\Program Files (x86)\Borland\CBuilder6\Lib\Psdk\iphlpapi.lib")

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

char errbuf[PCAP_ERRBUF_SIZE];
pcap_if_t *d;
pcap_if_t *alldevs;
bpf_u_int32 maskp;
bpf_u_int32 netp;       /* ip */
struct in_addr ip_addr;
PIP_ADAPTER_INFO pAdapterInfo, pAdapter;
ULONG iAdapterInfo;
PIP_ADDR_STRING chAddr;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

iAdapterInfo = 0;
	int iErr = GetAdaptersInfo(NULL, &iAdapterInfo);
	if(iErr && (iErr != ERROR_BUFFER_OVERFLOW))
	{
		MessageBox(0, "GetAdaptersInfo failed" , "ERROR !", MB_OK);
		return;
	}

	if(!(pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, iAdapterInfo)))
	{
		MessageBox(0, "Memory allocatiom error" , "ERROR !", MB_OK);
		return;
	}

	if(GetAdaptersInfo(pAdapterInfo, &iAdapterInfo))
	{
		MessageBox(0, "GetAdaptersInfo failed" , "ERROR !", MB_OK);
		return;
	}
	pAdapter = pAdapterInfo;

byte i = 0;
        /* Retrieve the device list */
       	if(pcap_findalldevs(&alldevs, errbuf) == -1)
       	{
                MessageBox(0 , "Îøèáêà â pcap_findalldevs", "Error" , MB_OK);
	 	exit(0);
       	}

 /* Print the list */
    for(d = alldevs; d; d=d->next)
    {
ListView1->Items->Add();
TListItem * Item = ListView1->Items->Item[ListView1->Items->Count-1];
        ++i;



                 Item->Caption = pAdapter->IpAddressList.IpAddress.String;
                pAdapter = pAdapter->Next;

                if (d->description)
        Item->SubItems->Add(d->description);
        else
        Item->SubItems->Add("No description available");
Item->SubItems->Add(d->name);

}
if(i==0) MessageBox(0 , "No interfaces found! Make sure WinPcap is installed.", "Error" , MB_OK);
}
//---------------------------------------------------------------------------
Тему можно закрывать.
Все сделал теперь все робит
http://programmersforum.ru/showthread.php?t=121835
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.
Binary_Dll вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить информацию о сетевом адаптере Энджи Работа с сетью в Delphi 10 29.03.2012 21:21
winpcap вывод ip в консоль draculito C/C++ Сетевое программирование 3 14.11.2010 21:38
Формирование пакета WinPcap flatgad Работа с сетью в Delphi 1 24.07.2010 20:24
DDoS & ARP + winPcap iGlass Работа с сетью в Delphi 2 18.04.2010 07:05
Получить информацию о графическом адаптере dimon_91 Общие вопросы C/C++ 1 08.12.2009 23:46