ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1691  
Старый 04.10.2008, 19:20
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме:
811764

Репутация: 119
Exclamation

Всем доброго времени суток. Помогите, плиз, подружить Builder с wpcap'ом
Пытаюсь сделать вывод инфы в Memo-поле. Вот исходник:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <winsock.h>
#include <time.h>
#define HAVE_REMOTE
#include "inc/pcap.h"
#include "inc/remote-ext.h"

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma comment(lib,"wpcap.lib")
#pragma comment(lib,"packet.lib")

TForm1 *Form1;
TMemo *Memo1;

typedef struct ip_address{
	u_char byte1;
	u_char byte2;
	u_char byte3;
	u_char byte4;
}ip_address;

/* IPv4 header */
typedef struct ip_header{
	u_char	ver_ihl;		// Version (4 bits) + Internet header length (4 bits)
	u_char	tos;			// Type of service
	u_short tlen;			// Total length
	u_short identification; // Identification
	u_short flags_fo;		// Flags (3 bits) + Fragment offset (13 bits)
	u_char	ttl;			// Time to live
	u_char	proto;			// Protocol
	u_short crc;			// Header checksum
	ip_address	saddr;		// Source address
	ip_address	daddr;		// Destination address
	u_int	op_pad;			// Option + Padding
}ip_header;

/* UDP header*/
typedef struct udp_header{
	u_short sport;			// Source port
	u_short dport;			// Destination port
	u_short len;			// Datagram length
	u_short crc;			// Checksum
}udp_header;

/* prototype of the packet handler */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
u_int netmask;
char packet_filter[] = "ip and udp";
struct bpf_program fcode;

	/* Retrieve the device list */
	if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
	{
                Memo1->Lines->Add("Error in pcap_findalldevs:" + IntToStr(errbuf));
		exit(1);
	}

	/* Print the list */

	inum = 2;

	/* Jump to the selected adapter */
	for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);

	/* Open the adapter */
	if ((adhandle= pcap_open(d->name, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000,  NULL, errbuf)) == NULL)
	{
                Memo1->Lines->Add("Unable to open the adapter.");
		pcap_freealldevs(alldevs);
		exit(1);
	}

	/* Check the link layer. We support only Ethernet for simplicity. */

	if(d->addresses != NULL)
		netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
	else
		netmask=0xffffff;
	//compile the filter
	if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )
	{
                Memo1->Lines->Add("Unable to compile the packet filter. Check the syntax.");
		pcap_freealldevs(alldevs);
		exit(-1);
	}

	if (pcap_setfilter(adhandle, &fcode)<0)
	{
                Memo1->Lines->Add("Error setting the filter.");
		pcap_freealldevs(alldevs);
		exit(-1);
	}
	pcap_freealldevs(alldevs);
	pcap_loop(adhandle, 0, packet_handler, NULL);
}

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
        TForm *Form1;
	ip_header *ih;
	udp_header *uh;
	u_int ip_len;
	u_short sport,dport;

	ih = (ip_header *) (pkt_data + 14); //length of ethernet header

	/* retireve the position of the udp header */
	ip_len = (ih->ver_ihl & 0xf) * 4;
	uh = (udp_header *) ((u_char*)ih + ip_len);

	/* convert from network byte order to host byte order */
	sport = ntohs( uh->sport );
	dport = ntohs( uh->dport );

	/* print ip addresses and udp ports */
        Memo1->Lines->Add(ih->saddr.byte1 + ih->saddr.byte2 + ih->saddr.byte3 + ih->saddr.byte4);
}
//---------------------------------------------------------------------------
При нажатии на Button прога "зависает". Если сделать трассировку (F7/F8), то билдер ругается на
Код:
        Memo1->Lines->Add(ih->saddr.byte1 + ih->saddr.byte2 + ih->saddr.byte3 + ih->saddr.byte4);
В чем ошибка?
 

  #1692  
Старый 04.10.2008, 19:39
Chaak
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
Провел на форуме:
5321514

Репутация: 3313


Отправить сообщение для Chaak с помощью ICQ
По умолчанию

Требуется создать двумерный массив заданной длины. Срочно !
 

  #1693  
Старый 04.10.2008, 19:50
Ch3ck
Познавший АНТИЧАТ
Регистрация: 09.06.2006
Сообщений: 1,359
Провел на форуме:
5301021

Репутация: 1879


По умолчанию

Код:
#define ROW 5;
#define COL 5;
void main() {
int a[ROW] [COL];
}
...
 

  #1694  
Старый 04.10.2008, 19:53
Larionich
Новичок
Регистрация: 21.09.2008
Сообщений: 16
Провел на форуме:
249855

Репутация: 52
По умолчанию

Цитата:
Требуется создать двумерный массив заданной длины. Срочно !
Двумерный динамический создавай так:
Код:
int rows, cols;
cin >> rows >> cols;
int **pMass = new int *[rows];
for (int i = 0; i < rows; i++)
  pMass[i] = new int[cols];
Обращаться например так:
Код:
Temp=Mass[i][j];
Можно воспользоваться стандартными контейнерами:
Код:
vector < vector<int> > Mass (sizecol, vector <int> (sizerow) );
 

  #1695  
Старый 04.10.2008, 19:59
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

Цитата:
Сообщение от criz  
... билдер ругается на
Код:
        Memo1->Lines->Add(ih->saddr.byte1 + ih->saddr.byte2 + ih->saddr.byte3 + ih->saddr.byte4);
В чем ошибка?
вроде как Memo1->Lines->Add строку выводит а ты туда пишешь число. Попробуй функцию inet_ntoa, она возвращает IP-адрес в виде ANSIZ строки с точками
 

  #1696  
Старый 04.10.2008, 20:03
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме:
811764

Репутация: 119
По умолчанию

Цитата:
Сообщение от bons  
вроде как Memo1->Lines->Add строку выводит а ты туда пишешь число. Попробуй функцию inet_ntoa, она возвращает IP-адрес в виде ANSIZ строки с точками
Не. Он в любом случае ругается, даже если я туда строку вставлю...
 

  #1697  
Старый 04.10.2008, 20:57
ronald
Участник форума
Регистрация: 27.03.2008
Сообщений: 288
Провел на форуме:
800727

Репутация: 83
Отправить сообщение для ronald с помощью ICQ
Talking

"Погуглил я и нашёл такую функцию" int main()
 

  #1698  
Старый 04.10.2008, 22:08
VIP
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
Провел на форуме:
89596

Репутация: 21
Отправить сообщение для VIP с помощью ICQ
По умолчанию

Цитата:
Сообщение от jawbreaker  
Как определить есть ли в четырехзначном числе одинаковые цифры???

Код:
#include <stdio.h>

int main()
{
    int a;
    scanf("%d\n", &a);
    int a3 = (a/1000)%10;
    int a2 = (a/100)%10;
    int a1 = (a/10) % 10;
    int a0 = a % 10;
    if((a0 == a1) && (a1 == a2) && (a2 == a3))
        printf("Equal\n");
    else
        printf("Not equal\n");

    return 0;
}
И всё!
Гениально! Большое спасибо! Это решение гораздо проще, чем я там мудрил.

Спасибо!
 

  #1699  
Старый 04.10.2008, 22:10
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме:
811764

Репутация: 119
По умолчанию

Цитата:
Помогите, плиз, подружить Builder с wpcap'ом
Пытаюсь сделать вывод инфы в Memo-поле.
Если я вместо последнего Memo1->Lines->Add, делаю
Код:
ShowMessage(AnsiString(ih->saddr.byte1));
То спустя какое-то время выскакивает-таки мое окошко...правда приходится много раз на "ОК" нажимать...
 

  #1700  
Старый 04.10.2008, 23:03
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

Цитата:
Сообщение от criz  
приходится много раз на "ОК" нажимать...
тогда попробуй так, рано или поздно получится:

Код:
Memo1->Lines->Add(IntToStr(ih->saddr.byte1)+"."+IntToStr(ih->saddr.byte2)+"." +IntToStr(ih->saddr.byte3)+"."+IntToStr(ih->saddr.byte4));
или так:

Код:
char buf[64];
...
wsprintf(buf, "%u.%u.%u.%u", ih->saddr.byte1,ih->saddr.byte2,ih->saddr.byte3,ih->saddr.byte4);
Memo1->Lines->Add(AnsiString(buf));
или даже так

Код:
Memo1->Lines->Add(AnsiString(inet_ntoa(*(struct in_addr*)&ih->saddr))));

под рукой билдера нет, но что-нить из этого точно должно работать

Последний раз редактировалось bons; 04.10.2008 в 23:23..
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ