Просмотр полной версии : скан диапозона ip [delphi]
народ подскажите, есть диапозон, например 127.0.0.1-127.0.255.255, как идеи можете предложить, что бы просканить весь диапозон?
В интернете есть куча исходников на эту тему. Есть идея воспользоваться гуглом и не морочить другим мозги.
Даже тут на форуме были примеры этого.
работает всё по принципу. типа так:
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
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 она считай и реализует эти действия
канал какой? лвс или че еще? для лвс делал арпсканер
rankor777
19.02.2010, 21:51
Ужас, зачем вам в делфи вставки на асме? Для ускорения чтоли? xD
Сканить порты лучше внешним сканером (VNC ByPass Auth например), потому как они лучше по-любому.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot