народ подскажите, есть диапозон, например 127.0.0.1-127.0.255.255, как идеи можете предложить, что бы просканить весь диапозон?
В интернете есть куча исходников на эту тему. Есть идея воспользоваться гуглом и не морочить другим мозги.
Даже тут на форуме были примеры этого. работает всё по принципу. типа так: Code: start_addr := inet_addr('127.0.0.1'); stop_addr := inet_addr('127.0.255.255'); while start_addr <> stop_addr do begin выполняешь свои действия asm mov eax, start_addr bswap eax inc eax bswap eax mov start_addr, eax end; end; т.е. ты определишь начальный и конечный адрес. Затем просто увеличиваешь начальный на 1 и так пока он не станет равным конечному. Но т.к. в IP порядок байт обратный тому который хранится в памяти, то для увеличения придется поменять порядок байт, что и делает инструкция bswap
Code: function IpToInt(ip: string): dword; // превращаем IP в число begin result := inet_addr(PChar(ip)); result := (result shl 24) or (result and $FF00 shl 8) or (result and $FF0000 shr 8) or (result shr 24); end; function IntToIP(i: DWORD): string; // число в IP var kk: DWORD; begin kk:=(i shl 24) or (i and $FF00 shl 8) or (i and $FF0000 shr 8) or (i shr 24); Result:= inet_ntoa(in_addr(kk)) end; procedure Scan; begin AddrTo:=IpToInt(IpTo); AddrFrom:=IpToInt(IpFrom); for i:=AddrTo to AddrFrom do ping_addr(IntToIp(i)); end;
2 flacs вот какраз bswap и выполняет kk:=(i shl 24) or (i and $FF00 shl 8) or (i and $FF0000 shr 8) or (i shr 24); только выполняет это всё намного быстрее или как вариант можно юзать апишку из winsock - ntohl она считай и реализует эти действия
Ужас, зачем вам в делфи вставки на асме? Для ускорения чтоли? xD Сканить порты лучше внешним сканером (VNC ByPass Auth например), потому как они лучше по-любому.