Kodsweb Security Team

MENU

  :::: Main
  :::: Archive
  :::: Programs
  :::: Texts
  :::: Proxies
  :::: Wordlists
  :::: E-Books
  :::: Rfc
  :::: Our Projects
  :::: About
  :::: Forum
  :::: Exploits
  :::: Friends
  :::: Services
  :::: Feedback
  :::: Misc

FEEDS

KodsWeb.ru - Forum
KodsWeb.ru - Project News
KodsWeb.ru - IT & Scene News
KodsWeb.ru - Defaces Bugtraq Exploits

SEARCH



WHOIS

FRIENDS

--{ team void }--

gfs-team

XakNotDie - Security, Coding and IT.

all networks hacking and security research

COUNTERS





Рейтинг@Mail.ru

Rambler's Top100 Rambler's Top100



[ Простейший сканер портов или Учимся работать с WinSocket’ами ]


Date: 3.01.02

Привет, хацкер!!!

Вот и пришло время научится писать проги под сеть.

Сразу хочу оговориться, что этот сканер не будет делать ничего, кроме как проверять, открыт ли порт, и делать это он будет наипримитивнейшим образом. Это потому, что он Простейший сканер портов, а цель этой статьи не в написании суперпуперсканера. Цель этой статьи в том, чтобы показать тебе основные принципы работы с так называемыми сокетами.

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

Ну что ж, приступим.

Программировать сокеты можно на любых языках программирования и под любой(почти) операционной системой. Вообще понятие сокетов пришло в винду (я имею в виду МАСТДАЙ) из UNIX'а. А так как основным языком программирования под юникс является C, то и будет, я считаю, целесообразнее писать на С(я имею в виду писать проги для сети). Конечно, ярые поклонники Паскаля(к коим и я принадлежу) могут писать и на нем(в смысле Паскале) (я по прежнему говорю о программировании под сеть), но как мне кажется Delphi(а именно с этой средой разработки сейчас у многих ассоциируется Паскаль) предназначена для написания тяжелых приложений с большим количеством форм и т.д. А вот утилиты(к коим и относятся сканеры портов) следует(это чисто мое мнение) писать на С++. Как уже все догадались, писать мы будем под МАСДАЙ, и поэтому воспользуемся VC++(честно говоря у меня только этот С под рукой и есть).

Создаем новый проект консольного приложения, делаем все как обычно, только вместо Win32 Application и в поле Project name выбираем Win32 Console Application. Добавляем к нашему проекту Source File и копируем в него нижеследующий исходник:
#include 
#include 

void main(int argc,char *argv[])
{
	WSADATA wsa;
	SOCKET s;
	SOCKADDR_IN a;
	int error,p_start,p_end;
	p_start = atoi(argv[2]);
	p_end = atoi(argv[3]);
	WSAStartup(0x0101,&wsa);
	a.sin_family = AF_INET;
	a.sin_addr.s_addr = inet_addr(argv[1]);
	for(int i=p_start;i<=p_end;i++)
	{
		s = socket(AF_INET,SOCK_STREAM,0);
		a.sin_port = htons(i);
		error = connect(s,(struct sockaddr*)&a,sizeof a);
		if(error == -1) 
			printf("Порт %d закрыт\n",i);
		else 
			{
				printf("Порт %d открыт\n",i);
				shutdown(s,2);
				closesocket(s);
			}
	}
	WSACleanup();
}
В настройках проекта нужно добавить библиотеку для работы с сокетами: wsock32.lib или ws2_32.lib. Далее компиляем и готово. Программа работает с параметрами из командной строки и при запуске должна иметь три параметра:

1) IP-адрес сканируемой машины
2) Номер порта-начала сканируемого диапазона.
3) Номер порта-окончание сканируемого диапазона.

Например: easyscan.exe 127.0.0.1 20 30

Хочется сразу сказать, что программа лишена многих проверок на ошибки. Это сделано для краткости кода и вполне естественно, что при написании нормальных программ необходимо учитывать все возможные ошибки.

Что ж, теперь разберемся с программой построчно.

#include

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

	WSADATA wsa;
		SOCKET s;
	SOCKADDR_IN a;
Это указатели на соответствующие структуры, с ними мы разберемся ниже.
	int error,p_start,p_end;
Еще несколько переменных.
	p_start = atoi(argv[2]);
		p_end = atoi(argv[3]);
Итак, p_start будет содержать начало сканируемого диапазона, а p_end(естественно) его окончание.
	WSAStartup(0x0101,&wsa);
В процессе инициализации приложение должно зарегистрировать себя в библиотеке WSOCK32.DLL , которая предоставляет приложениям интерфейс Windows Sockets в среде операционных систем Microsoft Windows 95 и Microsoft Windows NT. В wsa будут записаны сведения о конкретной реализации интерфейса Windows Sockets.
	a.sin_family = AF_INET;
	a.sin_addr.s_addr = inet_addr(argv[1]);
Для работы с адресами в формате Internet используется структура SOCKADDR_IN. Поле sin_family определяет тип адреса. Ты должн записать в это поле значение AF_INET, которое соответствует типу адреса, принятомув Internet. В sin_addr указывается IP адрес с которым будет работать сокет.
	s = socket(AF_INET,SOCK_STREAM,0);
С помощью этой функции создается сокет. Первый параметр определяет формат адреса. Для этого параметра ты должн указывать значение AF_INET , что соответствует формату адреса, принятому в Internet. Следующие два параметры определяют, соответственно тип сокета и протокол, который будет использован для данного сокета. Подробнее об этих параметрах я расскажу как ни будь позже.
	a.sin_port = htons(i);
Поле sin_port определяет номер порта, который будет использоваться для передачи данных.
	error = connect(s,(struct sockaddr*)&a,sizeof a);
Это самая главная строчка программы, мы пытаемся подключиться к текущему(в цикле) порту удаленной машины. Если нам это удалось, то порт открыт. (Кстати, корректнее сказать, функция connect создает канал связи с сервером)
	WSACleanup();
Перед тем, как завершить свою работу, приложение должно освободить ресурсы, полученные у операционной системы для работы с Windows Sockets. Я думаю, что остальные строки кода в комментариях не нуждаются. Вот, пожалуй, я и показал, как работать с сокетами в КЛИЕНТ-приложениях(пока без передачи и приема данных). Кто не желает останавливаться на достигнутом, вперед! Читайте соответствующую литературу. А кому лень, ждите, когда у меня дойдут руки до следующих статей.

Успехов!





Drakula     [KODSWEB]
!!! Статья является собственностью команды KODSWEB !!!
!!! Любое распространение без нашего разрешения строго запрешено !!!



 Copyright © 2001-2007 Kodsweb. All rights reserved.

Курсы и семинары по логистике - обучение логистике в москве. . Сухие строительные смеси - ветонит vh. Растворы для кладки.

>