HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

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

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

  #1251  
Старый 28.06.2008, 06:49
izlesa
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме:
414311

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

2z01b
test - указатель
применение к нему операции взятия адреса какбы не имеет смысла )))

не знаю как в Си++ и Си#, но в plain Cследующий код абсолютно правомерен.

char *test;
test = (char *)malloc(5);
test[0] = 1;
test[1] = 2;
test[2] = 3;
test[3] = 4;
test = test + 2;

Последний раз редактировалось izlesa; 28.06.2008 в 06:55..
 

  #1252  
Старый 28.06.2008, 10:24
xxxxxxxxxxxxxxx
Познающий
Регистрация: 20.01.2008
Сообщений: 65
Провел на форуме:
664107

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

написал прогу которая удаляет коментарии с исходников. Указываем в командной строке файл *cpp и она трет коменты... только иногда захватывает чють больше(((( как исправить?


Код:
#include <string.h> 
#include <stdio.h> 
#include <conio.h> 

int main(int argc, char * argv[])
{
FILE *f;
FILE *fp;
if((f=fopen(argv[1],"r"))==NULL)  // fgsdgsdgsdgds
{printf("can open file...");
getch();exit(1);}
int i=0,n;char str[50000];
while (!feof(f))
{
fscanf(f,"%c",&str[i]);i++;
}
//const char ch='\n';
n=strlen(str);int kol=0;
for(int j=0;j<n;j++)  // fgsdgsdgsdgds
{
if ((str[j]=='/')&&(str[j+1]=='/'))
//{if (str[j]=='\n')
{
kol++;
printf ("%2d)Exist ! ! ! !!\n",kol);  
do 
{
str[j]=' ';j++;}while (str[j]!='\n');
}//if
}//for
fp=fopen("no_coment.cpp","w");
fprintf(fp,"%s",str);
getch();
}
 

  #1253  
Старый 28.06.2008, 11:51
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

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

Smapt
Цитата:
char * test=new char[5];
test[0]=0x39;
test[1]=0x32;
test[2]=0x33;
test[3]=0x34;

test=test+2;
omfg!

Вы что, C# по Кернигану-Ритчи учите? =)))))

1. операции с указателями считаются небезопасными, поэтому чтобы их разрешить нужно перед соответствующими блоками кода добавлять слово unsafe и включать соответствующую опцию у компилятора.

2. нужно явно приводить тип
Код:
test[0]= (char)0x39;
3. и тогда уж нужно использовать stackalloc, а не new для выделения памяти
Код:
char *test= stackalloc char[5];

Последний раз редактировалось Forcer; 28.06.2008 в 11:57..
 

  #1254  
Старый 28.06.2008, 13:29
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


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

Цитата:
только иногда захватывает чють больше(((( как исправить?
Подобным алгоритмом - никак.
Кода раз в 10 как минимум больше надо.
Читай статьи про лексический анализ, юзай алгоритм State Machine.
 

  #1255  
Старый 28.06.2008, 23:05
izlesa
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме:
414311

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

2Forcer
нет, я Си только знаю
с C# не сталкивался ) код для Си был написан.
просто как пример
 

  #1256  
Старый 29.06.2008, 16:39
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
Question

Forcer, код был на СИ++ для примера)
Всем спасибо, проблема решена...
Да, и ещё вопрос, может подскажите где можно почтать про асинхронные(неблокируемые) сокеты, желательно с примерами реализации(в си++)
 

  #1257  
Старый 29.06.2008, 17:13
_empty
Познающий
Регистрация: 22.03.2008
Сообщений: 63
Провел на форуме:
247838

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

вот здесь можно скачать хорошую книгу про программирование сокетов и не только
http://iboo.ru/1452.htm
А это книга по сетевому программированию в windows, очень много интересного
PHP код:
http://www.pkmz.com/uploads/manuals/Network%20Programming%20for%20Microsoft%Windows.pdf 
То же самое что у Forcer'a но на русском, что то ссылка постиццо не хотела (((

Последний раз редактировалось _empty; 29.06.2008 в 17:22..
 

  #1258  
Старый 29.06.2008, 17:15
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

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


Последний раз редактировалось Forcer; 29.06.2008 в 17:18..
 

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

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

Помогите, пжлста, найти источник проблемы. Формирую тсп-пакет, с syn-флагом, отправляю.
Код:
void send_packet(SOCKET sd, unsigned short port, struct sockaddr_in source,  char *ip)
{

	struct sockaddr_in servaddr;

	memset(&servaddr, 0, sizeof(servaddr));

	servaddr.sin_family	=	AF_INET;
	servaddr.sin_port	=	htons(port);
	servaddr.sin_addr.s_addr	=	inet_addr(DEST);

	tcp_hdr.sport	=	getpid();
	tcp_hdr.dport	=	htons(port);
	tcp_hdr.seqnum	=	getpid() + port;
	tcp_hdr.acknum	=	0;
	tcp_hdr.flags	=	0x02;
	tcp_hdr.win		=	htons(128);
	tcp_hdr.crc		=	0;
	tcp_hdr.urgptr	=	0;

	pseudo_hdr.source_addr	=	source.sin_addr.s_addr;
	pseudo_hdr.dest_addr	=	servaddr.sin_addr.s_addr;
	pseudo_hdr.place_hold	=	0;
	pseudo_hdr.proto		=	IPPROTO_TCP;
	pseudo_hdr.length		=	htons(sizeof(struct tcp_header));

	memcpy(&tcp_hdr, &pseudo_hdr, sizeof(struct tcp_header));
	
	tcp_hdr.crc		=	chksum((unsigned short *)&pseudo_hdr, sizeof(struct pseudo_hdr));

	if(sendto(sd, &tcp_hdr, sizeof(struct tcp_header), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
	{
		printf("Error: sendto() failed\n %d", WSAGetLastError());
		exit(-1);		
	}

}
Тут все норм, ГетЛастЕррор молчит
Затем жду ответа от сервера:
Код:
int recv_packet(SOCKET sd)
{
	char recvbuf[1500];
	struct tcp_header *tcphdr = (struct tcp_header *)(recvbuf + sizeof(struct ip_hdr));

	while(1)
	{
		if(recv(sd, recvbuf, sizeof(recvbuf), 0) < 0)
		{
			printf("Error: recv() failed\n %d", WSAGetLastError());
		}

		if(tcphdr->dport == getpid())
		{
			if((tcphdr->flags == 0x02) && (tcphdr->flags == 0x10))
				return 1;
			else
				return 0;
		}
	}
}
Прога останавливается на:
Код:
		if(recv(sd, recvbuf, sizeof(recvbuf), 0) < 0)
Она не зависает....но и не работает. Помогите плиз...
 

  #1260  
Старый 02.07.2008, 19:46
reversys
Участник форума
Регистрация: 22.11.2007
Сообщений: 159
Провел на форуме:
732568

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

в этом месте recv ждёт чтобы чтонить пришло в sd. Туда ничего не идёт (т.к. всё уже пришло в прошлые проходы цикла) и поэтому нифига и не происходит.

Нужно определять получил ли ты всю нужныую инфу и выходить из цикла.
(определять можно например по количеству принятых байт)
 
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53



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


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




ANTICHAT.XYZ