Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

01.03.2006, 20:05
|
|
Познающий
Регистрация: 20.01.2006
Сообщений: 84
Провел на форуме: 156615
Репутация:
5
|
|
Прослушивание 80 порта
Как можно настроить сокет на прослушку 80 порта? когда я его настрайваю мне пишет что одним портом может пользоваться только одна прога. Но проблема в том что когда я соеденяюсь с гугл, он присылает ответ на 80 порт, хотя мой сокет работает на 181.
|
|
|

01.03.2006, 20:09
|
|
Познавший АНТИЧАТ
Регистрация: 21.11.2004
Сообщений: 1,137
Провел на форуме: 2487541
Репутация:
761
|
|
Тебе нужно воспользоватся снифером. (например ethereal)
http://www.ethereal.com/
А открывать сокет на один и тот же порт нельзя (имхо)
Иначе как программа определит что это её пакет? :]
|
|
|

01.03.2006, 20:10
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
когда я его настрайваю мне пишет что одним портом может пользоваться только одна прога.
да
Но проблема в том что когда я соеденяюсь с гугл, он присылает ответ на 80 порт
нет
|
|
|

01.03.2006, 22:28
|
|
Познающий
Регистрация: 20.01.2006
Сообщений: 84
Провел на форуме: 156615
Репутация:
5
|
|
А куда он отправляет ответ? Через тот же самый сокет который я открываю мне назад ничего не приходит 
|
|
|

02.03.2006, 00:43
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
КАК МОЖНО ОТПРАВЛЯТЬ ОТВЕТ ЧЕРЕЗ СОКЕТ???
Можно отправлять IP пакет с TCP фреймом, в котором есть
SrcIP
DstIP
SrcPORT
DstPORT
В винде хендл - это индекс в таблицах которые храняться в ядре. Хендлы можно копировать из одного процесса в другой, с помощью DuplicateHandle. Сокеты - это ХЕНДЛЫ. Их используют чтобы приложению было легче.
Гугл шлет ответ на твой айпи и порт который может быть ЛЮБЫМ.
Так что либо ты пишешь драйвер который атачит девайс на \Device\Tcp,
либо создаешь RAW сокет, ставишь сетевуху в неразбор. режим и слушаешь все пакеты которые идут. Доступа к Ethernet заголовкам тогда нету.
|
|
|

02.03.2006, 12:32
|
|
Познающий
Регистрация: 13.11.2004
Сообщений: 48
Провел на форуме: 91229
Репутация:
25
|
|
Как можно настроить сокет на прослушку 80 порта?
uses winsock;
procedure BindPort(Sender: TObject);
var
WSD: TWSAData;
Sock: TSocket;
Addr: TSockAddr;
Len: Integer;
AcceptedSock:TSocket;
begin
WSAStartUp(MakeWord(1,0), WSD);
Sock:= Socket(AF_Inet, Sock_Stream, 0);
Addr.sin_family:= PF_Inet;
Addr.sin_port:= Htons(25555);
Addr.sin_addr.S_addr:=InAddr_Any;
FillChar(Addr.Sin_Zero,SizeOf(Addr.Sin_Zero),0);
Bind(Sock, Addr, SizeOf(Addr));
Listen(Sock, SoMaxConn);
Len:= SizeOf(TSockAddr);
AcceptedSock:= Accept(Sock, @Addr, @Len);
WSACleanUp;
End;
Вот так вот слушаешь 80 порт
|
|
|

03.03.2006, 00:16
|
|
Познающий
Регистрация: 20.01.2006
Сообщений: 84
Провел на форуме: 156615
Репутация:
5
|
|
Сообщение от KEZ
либо создаешь RAW сокет, ставишь сетевуху в неразбор. режим и слушаешь все пакеты которые идут.
Как я понял ты имеешь в виду во это:
New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Unspecified)
мне выдает вот что:
"Предпринятая операция не поддерживается для выбранного типа объекта"
Как бы я не менял настройки, практически всегда мне выдает такую фигню
|
|
|

03.03.2006, 00:18
|
|
Познающий
Регистрация: 20.01.2006
Сообщений: 84
Провел на форуме: 156615
Репутация:
5
|
|
Сообщение от F1reF0x
Вот так вот слушаешь 80 порт
Спасибо конечно, в будущем пригодиться, но я не на delphi счас пишу 
|
|
|

09.03.2006, 17:36
|
|
Green member - Level 3
Регистрация: 08.10.2005
Сообщений: 396
Провел на форуме: 400609
Репутация:
239
|
|
ascas
почитай про перехват апи.
Очень хорошие статьи с исходниками на delphi и C++ есть на Wasm.ru - автор Ms-rem.
В случае с сокетами перехват лучше реализуется в ring0.
__________________
Никому нельзя верить...
|
|
|

09.03.2006, 17:41
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
Как я понял ты имеешь в виду во это:
New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Unspecified)
Нет я имею ввиду ф-ии socket, bind, accept из ws2_32.dll и winsock.dll
Используя какой язык ты будешь из вызывать - не имеет никакого значения, хоть на вашем дурацком делфи.
(Ты спросил - я ответил)
почитай про перехват апи.
В случае с сокетами перехват лучше реализуется в ring0.
Куришь (план) ?
Для самых ленивых
Код:
#include <conio.h>
#include <stdio.h>
#include <winsock2.h>
#define MAX_PACKET_SIZE 0x10000
#define SIO_RCVALL 0x98000001
#define TH_FIN 0x01
#define TH_SYN 0x02
#define TH_RST 0x04
#define TH_PUSH 0x08
#define TH_ACK 0x10
#define TH_URG 0x20
#define TH_ECNECHO 0x40 /* ECN Echo */
#define TH_CWR 0x80 /* ECN Cwnd Reduced */
#define TH_OFF(th) (((th)->th_offx2 & 0xf0) >> 4)
#pragma comment( lib, "wsock32.lib" )
char Buffer[MAX_PACKET_SIZE];
typedef struct IPHeader {
UCHAR iph_verlen;
UCHAR iph_tos;
USHORT iph_length;
USHORT iph_id;
USHORT iph_offset;
UCHAR iph_ttl;
UCHAR iph_protocol;
USHORT iph_xsum;
ULONG iph_src;
ULONG iph_dest;
} IPHeader;
struct tcphdr {
USHORT th_sport; /* source port */
USHORT th_dport; /* destination port */
ULONG th_seq; /* sequence number */
ULONG th_ack; /* acknowledgement number */
UCHAR th_offx2; /* data offset, rsvd */
UCHAR th_flags;
USHORT th_win; /* window */
USHORT th_sum; /* checksum */
USHORT th_urp; /* urgent pointer */
};
char src[10];
char dest[10];
char ds[15];
unsigned short lowbyte;
unsigned short hibyte;
USHORT Checksum( PUCHAR Data, USHORT Length )
{
ULONG sum=0;
USHORT sshort=0;
PUSHORT wd=(PUSHORT)Data;
USHORT wc=Length >> 1;
while(wc--)
sum+=*wd++;
if(Length & 1)
sum+=*(PUCHAR)wd;
while( sum >> 16 )
sum = (sum & 0xFFFF) + (sum >> 16);
return (sum != 0xFFFF) ? ~sum : sum;
}
void printbuf( char *buf, int len )
{
char str[15];
int k = 0;
for (int i = 0; i < len; i++)
{
memset( str, 0, 15 );
sprintf( str, "%x", abs( buf[i] ) );
if (strlen( str ) == 1)
{
str[1] = str[0];
str[0] = '0';
}
printf( "%s ", str );
if (k == 15)
{
printf( "\n" );
k = 0;
}
else k++;
}
}
void main()
{
WSADATA wsadata;
SOCKET s;
char name[128];
HOSTENT* phe;
SOCKADDR_IN sa;
IN_ADDR sa1;
char ttl[25];
int i;
WORD *wd;
ULONG summ;
unsigned long flag = 1;
IPHeader *hdr;
tcphdr *thdr;
WSAStartup(MAKEWORD(2,2), &wsadata);
s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
gethostname(name, sizeof(name));
phe = gethostbyname( name );
ZeroMemory( &sa, sizeof(sa) );
sa.sin_family = AF_INET;
sa.sin_addr.s_addr =((struct in_addr *)phe->h_addr_list[0])->s_addr;
bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
ioctlsocket( s, SIO_RCVALL, &flag );
int ai = 0;
while( !_kbhit() )
{
memset( Buffer, 0, MAX_PACKET_SIZE );
int count;
count = recv( s, Buffer, sizeof( Buffer ), 0 );
if (count >= sizeof( IPHeader) )
{
//summ=0;
hdr = (IPHeader*)Buffer;
thdr = (tcphdr*)Buffer + sizeof( IPHeader );
//wd=(WORD *)Buffer;
//printf( "%u ", hdr->iph_verlen & 0xF);
//printf( "0x%X ", ntohs(hdr->iph_xsum));
//hdr->iph_xsum=0;
//printf( "0x%X \n", htons(Checksum((PUCHAR)Buffer, (hdr->iph_verlen & 0xF)*4)));
if (hdr->iph_protocol == IPPROTO_TCP)
{
//printf( "%d.\n", ai );
//printbuf( (char*)hdr, count );
//printf( "\n\n" );
printf( "ACK: %d\n", thdr->th_ack );
for (int j = 0; j <= count; j++)
printf( "%c", Buffer[j] );
printf( "\r\n" );
ai++;
}
}
}
closesocket( s );
WSACleanup();
}
Последний раз редактировалось KEZ; 09.03.2006 в 17:51..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|