ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #5821  
Старый 17.03.2010, 23:04
EndLeSSDre@M
Участник форума
Регистрация: 18.07.2009
Сообщений: 278
Провел на форуме:
3055344

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

Цитата:
А на счет того что вам втирали в университете, это ИМХО не фига, потому что все завит от условия задачи
я ей тоже самое втирал)))))) но она сцук все равно заставила переделать))))
 
Ответить с цитированием

  #5822  
Старый 17.03.2010, 23:06
fenixelite
Участник форума
Регистрация: 07.02.2010
Сообщений: 189
Провел на форуме:
870084

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

Я в школе еще )) Так что тут некому втирать( сам больше учителей знаю )..... А насчет обращения к элементам, а что измениться если будет 500 элементов?
 
Ответить с цитированием

  #5823  
Старый 17.03.2010, 23:10
Soherox
Познающий
Регистрация: 17.02.2010
Сообщений: 45
Провел на форуме:
195184

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

fenixelite...ничего не будет, программа будет корректно работать, только повторяю, значения элементов, а не количество элементов...количество элементов может быть столько, сколько максимальное значение типа, и их значение тоже должно быть в диапазоне типа, который указывался в начале

var
a: byte (Shortint, Word, Integer, Longint, Int64(в делфи))

У каждого типа свой диапазон значений

Последний раз редактировалось Soherox; 17.03.2010 в 23:14..
 
Ответить с цитированием

  #5824  
Старый 19.03.2010, 12:09
[stranger]
Участник форума
Регистрация: 02.02.2010
Сообщений: 107
Провел на форуме:
612028

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

просветите в чем проблема..
если из коммандной строки запускать
Цитата:
dir c:\ /a:d /b > c:\list.txt
, то все работает отлично, а если в делфи вот так:
Цитата:
shellexecute(0,nil,pchar('dir'),pchar('c:\ /a:d /b > c:\list.txt'),nil,0);
то нифига не работает! в чем проблема?
 
Ответить с цитированием

  #5825  
Старый 19.03.2010, 12:18
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме:
1035284

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

[stranger]
попробуй так
Код:
shellexecute(0,nil,pchar('cmd.exe'),pchar(' /C dir c:\ /a:d /b > c:\list.txt'),nil,0);
да и dir это команда консоли а не программа то есть ты должен запустить консоль (cmd.exe) и передать ей команду с параметрами
Код:
/C      Выполнение указанной команды (строки) с последующим завершением.

Последний раз редактировалось transserg; 19.03.2010 в 12:21..
 
Ответить с цитированием

  #5826  
Старый 19.03.2010, 12:31
[stranger]
Участник форума
Регистрация: 02.02.2010
Сообщений: 107
Провел на форуме:
612028

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

мда.. это ж надо было так проглупить.. спать больше надо.. спасибо большое!
что интересно этот код работал! непонятно как, но файл появлялся..
 
Ответить с цитированием

  #5827  
Старый 19.03.2010, 22:23
ErrorNeo
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме:
4297091

Репутация: 2261


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

друзья, есть неожиданная, простая с виду проблема...
есть код
Код:
     FillChar(addr, SizeOf(sockaddr_in), 0);
     addr.sin_family:=AF_Inet;
     addr.sin_port:=htons(25);
     addr.sin_addr.S_addr:=inet_addr('97.164.93.167');
      s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
     Connect(S,addr,SizeOf(TSockAddr));
     send(s, sendbuff[1] , sLength(sendbuff), 0);
и есть сокс-4 прокси без авторизации (либо с авторизацией) "194.88.11.123:3987". Как дополнить этот код на дельфи так, чтобы коннект шел через эту прокси? (требуется как send, так и recv)

В гугле немало примеров работы через соксы на Си, и увы ни одного на Дельфи.

На Си есть следующий набор функций для работы с сокс (спасибо m_script):
Код:
//---------------------------------------------------------------------------
#include "Unit2.h"
//---------------------------------------------------------------------------
BOOL CTSocket::CreateSocket()
{
   return (sock = socket(AF_INET, SOCK_STREAM, 0)) != NULL;
}
//---------------------------------------------------------------------------
BOOL CTSocket::Connect(unsigned long ip, unsigned short port)
{
	SOCKADDR_IN addr;
	memset(&addr, 0, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_addr.S_un.S_addr = ip;
	addr.sin_port = port;
	
	return connect(sock, (SOCKADDR*)&addr, sizeof(addr)) == 0;
}
//---------------------------------------------------------------------------
BOOL CTSocket::Connect(LPCSTR name, unsigned short port)
{
	HOSTENT* p = gethostbyname(name);
	if(p == NULL)
		return FALSE;
	
	return Connect(p->h_addr_list[0], port);
}
//---------------------------------------------------------------------------
int CTSocket::Send(const char* str, int len)
{
	return send(sock, str, len, 0);
}
//---------------------------------------------------------------------------
int CTSocket::Recv(char* buf, int max)
{
	return recv(sock, buf, max, 0);
}
//---------------------------------------------------------------------------
void CTSocket::Close()
{
	closesocket(sock);
}
//---------------------------------------------------------------------------
unsigned long CTSocket::GetHost()
{
	SOCKADDR_IN addr;
	int cbName = sizeof(addr);
	if (getsockname(sock, (SOCKADDR*)&addr, &cbName) == 0)
	{
	  return addr.sin_addr.S_un.S_addr;
	} 
	else 
		return 0;
}
//---------------------------------------------------------------------------
BOOL CSocksSocket::CreateSocket()
{
	if(!pSocket->CreateSocket()) 
		return FALSE;
	if(!pSocket->Connect(socks_ip, socks_port)) 
		return FALSE;
	buffer[0] = 5;  // Ver
	buffer[1] = 1;  // 1 method
	buffer[2] = 0;  // no auth
	pSocket->Send(buffer, 3);
	int n = pSocket->Recv(buffer, 2);
	if (n != 2)
		return FALSE;
	if (buffer[1] != 0) 
		return FALSE;  // method 0 not supported
	return TRUE;
}
//---------------------------------------------------------------------------
BOOL CSocksSocket::Connect(unsigned long ip, unsigned short port)
{
	buffer[0] = 5;  // Ver
	buffer[1] = 1;  // CONNECT
	buffer[2] = 0;  // Reserved
	buffer[3] = 1;  // IPv4
	*((unsigned long*)(buffer + 4)) = ip;
	*((unsigned short*)(buffer + 8)) = port;
	pSocket->Send(buffer, 10);
	int n = pSocket->Recv(buffer, 10);
	if (n != 10) 
		return FALSE;
	if (buffer[1] != 0) 
		return FALSE; // Can't connect
	if (buffer[3] != 1) 
		return FALSE; // Будем требовать, чтобы нам сказали IP, а не что-нибудь другое.
	l_ip = *((unsigned long*)(buffer + 4));
	return TRUE;
}
//---------------------------------------------------------------------------
BOOL CSocksSocket::Connect(LPCSTR name, unsigned short port)
{
	buffer[0] = 5;
	buffer[1] = 1;
	buffer[2] = 0;
	buffer[3] = 3;  // Domain name
	int m = strlen(name);
	buffer[4] = m;  // Length byte
	memcpy(buffer+5, name, m); // Копируем строку без завершающего нуля
	*((unsigned short*)(buffer + 5 + m)) = port;
	pSocket->Send(buffer, m + 7);
	int n = pSocket->Recv(buffer, 10);
	if (n != 10)
		return FALSE;
	if (buffer[1] != 0) 
		return FALSE;
	if (buffer[3] != 1) 
		return FALSE; // Будем требовать, чтобы нам сказали IP, а не что-нибудь другое.
	l_ip = *((unsigned long*)(buffer + 4));
	return TRUE;
}
//---------------------------------------------------------------------------
int CSocksSocket::Send(const char* str, int len)
{
	return pSocket->Send(str, len);
}
//---------------------------------------------------------------------------
int CSocksSocket::Recv(char* buf, int max)
{
	return pSocket->Recv(buf, max);
}
//---------------------------------------------------------------------------
void CSocksSocket::Close()
{
	pSocket->Close();
}
//---------------------------------------------------------------------------
unsigned long CSocksSocket::GetHost()
{
	return l_ip;
}
//---------------------------------------------------------------------------
может у кого-то есть аналог на Дельфи?
"Переписать" прошу не предлагать. Если совсем будет тяжко - перепишу, но т.к. я не знаю Си, делать это очень не хочется. Не верится, что нет ничего готового и уже не дельфи.

За помощь отблагодарю плюсегами

Последний раз редактировалось ErrorNeo; 19.03.2010 в 23:04..
 
Ответить с цитированием

  #5828  
Старый 19.03.2010, 23:02
ErrorNeo
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме:
4297091

Репутация: 2261


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

нет, про цепочку я ничего не говорил.
Мне просто нужно настроить работу приложения через (одну) сокс-4 прокси.

уточню:
моё приложение работает по протоколу smtp, потому задать "адрес" в строчке "host" (как это было бы при http запросе) нет возможности.
Надо как-то по-другому объяснить соксу, куда именно он должен дальше слать запрос (destination ip&port)

Последний раз редактировалось ErrorNeo; 19.03.2010 в 23:09..
 
Ответить с цитированием

  #5829  
Старый 19.03.2010, 23:56
wolmer
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
Провел на форуме:
4761503

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

errorneo, вообщем вот: delphikingdom.info/asp/answer.asp?IDAnswer=56157

просмотри эту тему и тебе все станет ясно (заранее говорю: вся фишка в TSOCKS4_REQUEST)(первый send - структуры TSOCKS4_REQUEST, которая дает знать соксу что мы имеем дело с ******** данными, второй сенд - уже нормальный пакет посылаем (конкретно не имел дело с сокс протокол, так что это все на догадках и предположениях))

не понял? попробуй погуглить на структуру TSOCKS4_REQUEST + delphi (или же лучше всего - описание протокола SOCKs в руки )

Последний раз редактировалось wolmer; 20.03.2010 в 00:02..
 
Ответить с цитированием

  #5830  
Старый 20.03.2010, 00:46
ErrorNeo
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме:
4297091

Репутация: 2261


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

ответ на мой вопрос:

FillChar(addr, SizeOf(sockaddr_in), 0);
addr.sin_family:=AF_Inet;
addr.sin_port:=htons(3987);
addr.sin_addr.S_addr:=inet_addr('194.88.11.123'); //да, логично кто конектимся к прокси
s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
Connect(S,addr,SizeOf(TSockAddr));

sendbuff:=
{BYTE version - 04} chr(4) +
{01 - TCP Connect} chr(1) +
{тут порт, он у нас 0025} chr(0)+chr(25) +
{тут ip, который 97.164.93.167}chr(97)+chr(164)+chr(93)+chr(167) +
{тут неведомая ***я} chr(77)+chr(79)+chr(90)+chr(0);
send(s, sendbuff[1] , Length(sendbuff);, 0);

sendbuff:= "нужный запрос"
send(s, sendbuff[1] , sLength(sendbuff), 0);


//да, по идее нужно писать структуру и отправлять её, но можно и так.. по-суровому. Хотя разницы, в общем-то, нет. Просто так выглядит примитивнее

Последний раз редактировалось ErrorNeo; 20.03.2010 в 00:56..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Wi-Fi, BT] Задай вопрос - получи ответ! Alexsize Беспроводные технологии/WPAN/WLAN 2565 Вчера 18:18
[ *NIX ] Задай вопрос - получи ответ. Xszz *nix 1547 15.06.2010 15:41
[jQuery] - Задай вопрос, получи ответ Isis PHP, PERL, MySQL, JavaScript 62 25.12.2009 03:25
ЕсТь ВоПрос Guma Чаты 4 26.10.2005 21:48



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


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




ANTICHAT.XYZ