Здравствуйте. Я начинающий програамист. Подскажите как в сети просканировать компы на наличие. Т.е. аналог пинга по всем адресам. Может есть какие эффективные методы? Может уже есть тут подобные обсуждения? Я что-то не нашел (плохо искал) Спасибо
strange2007 Так может? Код (Text): nmap -sP 1-255.1-255.1-255.1-255 Код (Text): nmap [Scan Type...] [Options] {target specification} HOST DISCOVERY: -sL: List Scan - simply list targets to scan -sP: Ping Scan - go no further than determining if host is online -P0: Treat all hosts as online -- skip host discovery -PS/PA/PU [portlist]: TCP SYN/ACK or UDP discovery to given ports -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes -n/-R: Never do DNS resolution/Always resolve [default: sometimes] --dns-servers <serv1[,serv2],...>: Specify custom DNS servers --system-dns: Use OS’s DNS resolver
strange2007 nmap - линуксовая команда, а не виндовое апи результаты выдает примерно такие Код (Text): [cr@localhost ~]$ nmap -sP 192.168.1.1-255 Starting Nmap 5.21 ( http://nmap.org ) at 2011-01-24 08:30 MSK Nmap scan report for 192.168.1.1 Host is up (0.0012s latency). Nmap scan report for 192.168.1.2 Host is up (0.00023s latency). Nmap done: 255 IP addresses (2 hosts up) scanned in 15.51 seconds [cr@localhost ~]$
Ага, клево. Может есть что-то конкретней? Куда рыть хотя бы? Я совсем ни чего не знаю. Даже не представляю с чего начинать
ну ты беспомощный... Тебе что нужно? Получить сетевые адреса. Набирай в гугле "получитьсетевой" (слитно, т.к. имена функций пишутся слитно) на английском (getnetwork) и смотри на suggestions в строке набора и на ссылки, ведущие в мсдн.
Наверное нужно скачать что-то типа "Интернет: первые шаги", потом что-то например "Администрирование сети на примерах" Потом "Cети Linux " и что-то Йона Шнайдера ... Пока не упрешься и не вычитаешь терминологию - думаю не прорвешься.
Пример более менее эффективного метода сканирования портов. Смысл в неблокируемых сокетах. Под линукс будет примерно похоже, только там евенты заменяются на select. Если честно не знаю как ICMP а не TCP пакеты посылать по идее надо поменять параметры для вызова socket.. Код (Text): #include <cstdlib> #include <iostream> #include <winsock2.h> #define N 10 #define PORT 80 using namespace std; int check(); int main(int argc, char *argv[]) { check(); system("PAUSE"); return EXIT_SUCCESS; } int check() { char *a[]={"74.125.87.103", "74.125.87.105", "74.125.87.99","10.10.0.4", "74.125.87.147","10.10.0.1","74.125.87.106", "74.125.87.104","10.10.0.2","10.10.0.3",}; WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); SOCKET hSocket[N]; WSAEVENT ev[N]; int i; struct sockaddr_in addr; for(i = 0;i<N;i++) { hSocket[i] = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); addr.sin_family = AF_INET; addr.sin_port = htons (PORT); addr.sin_addr.s_addr = inet_addr(a[i]); ULONG ulBlock = 1; if (ioctlsocket(hSocket[i], FIONBIO, &ulBlock) == SOCKET_ERROR) { return 0; } connect(hSocket[i], (struct sockaddr *) &addr, sizeof (addr)); ev[i] = WSACreateEvent(); WSAEventSelect(hSocket[i],ev[i],FD_WRITE); } while(1) { DWORD Index = WSAWaitForMultipleEvents(N, ev, FALSE, 5000, FALSE); if(Index==WSA_WAIT_TIMEOUT) break; else if(Index>=WSA_WAIT_EVENT_0) { int i=Index-WSA_WAIT_EVENT_0; cout<<a[i]<<":"<<PORT<<" is open\n"; WSAResetEvent(ev[i]); closesocket(hSocket[i]); } } cout<<"done\n"; }
strange2007 ОК. Если интересуют просто сетевые API для TCP или UDP, то копать в сторону sockets, winsock. Даже в MSDN всё разжёвано и с семплами. Более того, механизм аналогичен UNIX, поэтому в сети по этой теме есть куча инфы ещё более нубского уровня. Если интересует PING и ICMP, то копать по этим ключевым словам. В винде это делается через iphlpapi.dll, либо через raw sockets - у меня таким образом удавалось с ICMP пакетами работать, но это требует прав админа. Больше ничего не могу подсказать.
Если человек хочт нормальный сканер сделать. То для начала, ставим linux..или free... изучаем как формировать tcp или любые другие пакеты, и отправлять их в сеть, в unix. (описание почти в любой книге для кулл хацкеров.. например "программирование боевого софта под linux"). Да и вообще, прикладной уровень оч хорошо описан в книгах Стивенса. Почитай, и вопросы отпадут. например эту книгу http://www.booksgid.com/operating_s...2-unix.-razrabotka-setevykh-prilozhenijj.html
Ух!!!! Спасибо всем!!!!! Инфа самое то! Да, я делаю маленький сканер. Типа, что бы знать кто или что у меня в сети. Из-за того, что не знал какие технологии есть и задал вопрос как сумел. Книги все читаю. Проблема только в мсдне, фигово он мне даётся. Не могу еще его раскусить до конца, но это поправимо Пошел пробовать
Ах да, почему такое спрашиваю? Конечно, сначала у гугля и яндекса спрашивал. Собираю инфу. Но, согласно накопленному опыту знаю, что в некоторых случаях из нескольких решений есть более оптимальное или специфичное под задачу. Усредненное решение толпы спецов будет как раз самое верное. Тут только надо правильно задать вопрос В общем, креста, не суди так сильно, во всем есть смысл