ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

28.06.2008, 06:49
|
|
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме: 414311
Репутация:
110
|
|
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..
|
|
|

28.06.2008, 10:24
|
|
Познающий
Регистрация: 20.01.2008
Сообщений: 65
Провел на форуме: 664107
Репутация:
25
|
|
написал прогу которая удаляет коментарии с исходников. Указываем в командной строке файл *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();
}
|
|
|

28.06.2008, 11:51
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
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..
|
|
|

28.06.2008, 13:29
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
только иногда захватывает чють больше(((( как исправить?
Подобным алгоритмом - никак.
Кода раз в 10 как минимум больше надо.
Читай статьи про лексический анализ, юзай алгоритм State Machine.
|
|
|

28.06.2008, 23:05
|
|
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме: 414311
Репутация:
110
|
|
2Forcer
нет, я Си только знаю
с C# не сталкивался ) код для Си был написан.
просто как пример
|
|
|

29.06.2008, 16:39
|
|
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме: 373690
Репутация:
88
|
|
Forcer, код был на СИ++ для примера)
Всем спасибо, проблема решена...
Да, и ещё вопрос, может подскажите где можно почтать про асинхронные(неблокируемые) сокеты, желательно с примерами реализации(в си++)
|
|
|

29.06.2008, 17:13
|
|
Познающий
Регистрация: 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..
|
|
|

29.06.2008, 17:15
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
Последний раз редактировалось Forcer; 29.06.2008 в 17:18..
|
|
|

02.07.2008, 19:13
|
|
Постоянный
Регистрация: 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)
Она не зависает....но и не работает. Помогите плиз...
|
|
|

02.07.2008, 19:46
|
|
Участник форума
Регистрация: 22.11.2007
Сообщений: 159
Провел на форуме: 732568
Репутация:
156
|
|
в этом месте recv ждёт чтобы чтонить пришло в sd. Туда ничего не идёт (т.к. всё уже пришло в прошлые проходы цикла) и поэтому нифига и не происходит.
Нужно определять получил ли ты всю нужныую инфу и выходить из цикла.
(определять можно например по количеству принятых байт)
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|