информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsSpanning Tree Protocol: недокументированное применениеСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Серьезный сбой AWS положил множество... 
 Фишинговая атака на Python-разработчиков 
 ФБР нашла русский след в атаках... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Даже и не знаю куда запостить... connect() в сокетах. 14.09.02 16:59  
Автор: PS <PS> Статус: Elderman
Отредактировано 15.09.02 00:31  Количество правок: 1
<"чистая" ссылка>
тут случайно увидел...
Под виндами простейшая программа пытающаяся открыть коннект (ессно используя сокеты) по порту, который ни кем не прослушивается. И что мы видим в tcpdump ? мы видим ТРИ попытки ! Причем с одним и тем же сиквенсом.
Проверил то же самое под линухом: все в порядке - попытка только одна.
И нафига спрашивается ломиться лишних два раза ? Интересно, это так и было задуманно или очередной баг у майкрософта ?

Что бы не быть голословным, привожу тестовые программки и дампы.

Это Windows программка:

#include <stdio.h>
#include <winsock2.h>

void main()
{
	WORD wVersionRequested;
	WSADATA wsaData;	
	int err;
	
	wVersionRequested = MAKEWORD( 2, 2 );
 
	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) 
	{		
		return;		
	}
	
 
	struct sockaddr_in server;
	server.sin_family = AF_INET;
	server.sin_port   = htons( 4000 );
	server.sin_addr.s_addr = inet_addr( "192.92.7.1" );

	SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );

	if( connect( s, (struct sockaddr*)&server, sizeof(struct sockaddr_in) ) == -1 )
	{
		printf( "connect faild\n" );
		return;		
	}

	return;


}

---

Вот что показывает tcpdump:

00:12:24.412629 192.92.7.2.2301 > 192.92.7.1.4000: S 2604852891:2604852891(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
00:12:24.412629 192.92.7.1.4000 > 192.92.7.2.2301: R 0:0(0) ack 2604852892 win 0 (DF)
00:12:24.852629 192.92.7.2.2301 > 192.92.7.1.4000: S 2604852891:2604852891(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
00:12:24.852629 192.92.7.1.4000 > 192.92.7.2.2301: R 0:0(0) ack 1 win 0 (DF)
00:12:25.352629 192.92.7.2.2301 > 192.92.7.1.4000: S 2604852891:2604852891(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
00:12:25.352629 192.92.7.1.4000 > 192.92.7.2.2301: R 0:0(0) ack 1 win 0 (DF)

---

А это та же программка запущенная из под Linux:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
	int sock;
	struct sockaddr_in server = {AF_INET, htons(4000)};
	
	sock = socket( AF_INET, SOCK_STREAM, 0 );
	server.sin_addr.s_addr = inet_addr( "192.92.7.1" );
	if( connect( sock, (struct sockaddr*)&server, sizeof( struct sockaddr_in)) != -1 )
		printf( "OK\n" );
	else
		printf( "FAILD\n" );

	return 1;
}

---

И её tcpdump:
00:20:52.202629 192.92.7.2.32771 > 192.92.7.1.4000: S 4233571007:4233571007(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 0> (DF)
00:20:52.202629 192.92.7.1.4000 > 192.92.7.2.32771: R 0:0(0) ack 4233571008 win 0 (DF)

---
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach