WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  ASM
  как бы мне устроить обработку строку содержащюю ip аддресс

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   как бы мне устроить обработку строку содержащюю ip аддресс
an0rak опубликован 06-11-2001 12:39 MSK   Click Here to See the Profile for an0rak   Click Here to Email an0rak  
кто-нибудь помогите устроить обработку ip адресса :
как её разделить на части(192.168.11.20 на переменные равные 192,168,11,20)
потом как проверить строку с ip на провильность(например если она равна 678.789.YYY.23 то-есть это не правельный ip)
devilray опубликован 06-11-2001 00:58 MSK     Click Here to See the Profile for devilray  Click Here to Email devilray     
ip адрес передается/принимается в виде 32-битной величины (одно НО: в сетевом представлении, то есть если ip = 192.168.1.80, то в памяти будет 0x5001A8C0 !!!). Так что уже все разбито
an0rak опубликован 06-11-2001 13:23 MSK     Click Here to See the Profile for an0rak  Click Here to Email an0rak     
а как проверить строку на правельность?
devilray опубликован 06-11-2001 14:53 MSK     Click Here to See the Profile for devilray  Click Here to Email devilray     
а в чем сложность то ??? бери отдельные октеты и сравнивай
an0rak опубликован 06-11-2001 15:30 MSK     Click Here to See the Profile for an0rak  Click Here to Email an0rak     
извините за ламеризм но не мог бы кто-нибудь дать исходник, а?
7in опубликован 06-11-2001 22:53 MSK     Click Here to See the Profile for 7in  Click Here to Email 7in     
Мог бы.....
Только это для 16 бит.....

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Преобразование строки IP-адреса в число (by 7in) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

.MODEL Tiny,Pascal ; Обратите внимание!
.486
.CODE
ORG 100h ; COM-программа

SMART

Start:

;
; Пример преобразует строку в число и выводит байты в виде символов на экран
;

;-- Начало примера ----------------------------------------------------------;

push ds
lea ax,IP
push ax
call ProcessIP

jnc Ok
xor eax,eax ; Если ошибка, просто заносим нули...
Ok:
int 29h ; Выводит на экран символ с кодом AL
mov al,ah
int 29h
shr eax,16
int 29h
mov al,ah
int 29h

int 20h ; Выходим из программы

IP DB '1.2.3.4',0

;-- Конец примера :) --------------------------------------------------------;

; На входе: адрес ASCIIZ-строки (в стеке)
; На выходе: IP-адрес в EAX (первое число в AL) и флаг CF сброшен
; ...или... флаг CF установлен, если ошибка
ProcessIP proc
arg String:DWORD ; В 32-х битах здесь будет :PWORD (вроде)
uses DS ; Если DS жалко терять :)
cld
lds si,String ; В 32-х: lds esi,String
xor edx,edx ; Здесь временно будет IP
mov cx,10
mov ax,'.' ; Чтобы сработала ошибка, если в начале точка
@@NextNumber:
cmp ah,'.'
je @@Error ; В начале (или после точки) не может быть точки
ror edx,8 ; Следующий байт
xor bx,bx ; BX - текущее число
inc ch ; CH - счетчик чисел
@@NextDigit:
mov dl,bl ; Сохраним пока то число, которое есть
mov ah,al ; Сохраняем предыдущий байт
lodsb ; Читаем следующий байт в AL
or al,al
jz @@End ; Если это ноль, то на завершение
cmp al,'.'
je @@NextNumber ; Если точка, то начинаем следующее число
; Переводим новую цифру
sub al,'0' ; AL=0..9 (если это цифра)
cmp al,9
ja @@Error ; Это не цифра...
xchg ax,bx ; AH,AL сохраняем в BX, а BX -> AX
mul cl ; Умножаем AL на 10
or ah,ah
jnz @@Error ; Если число >= 260, то ошибка
xchg bx,ax ; Меняем BX и AX
add bl,al ; Добавляем цифру
jc @@Error ; Если число = 256..259, то ошибка
jmp @@NextDigit ; Следующая цифра
@@End:
cmp ah,'.'
je @@Error ; В конце не может быть точки
cmp ch,4
jne @@Error ; Чисел должно быть 4 !
ror edx,8 ; Прокручиваем последний раз
xchg eax,edx ; Записываем IP в EAX
clc ; CF=NC=0 - ошибки нет
mov dl,? ; Это просто небольшой трюк...
ORG $-1 ; ...аналогично jmp @@Exit, но на байт меньше :)
@@Error: stc ; CF=CY=1 - ошибка есть
@@Exit: ret
ProcessIP endp

END Start

an0rak опубликован 07-11-2001 10:05 MSK     Click Here to See the Profile for an0rak  Click Here to Email an0rak     
Большое спасибо
ты мне очень помог!!!!
тханкс!!

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.