powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / подскажите алгоритм поиска
10 сообщений из 10, страница 1 из 1
подскажите алгоритм поиска
    #38974008
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотелось бы пропинговать локальную сеть и занести ip адреса в таблицу, то что есть всякие утилиты сканеры сети, знаю, они мне не нужны(т.к. для себя наваял программку учет ip адресов и хотелось бы эту функцию в свою программку добавить...)... у меня всего две подсети 1 и 2(делал сеть не я, и неизвестно кто, постоянно появляются какие-то не учтенные ip) Первое что приходит, это пинг адрес >текст, и потом разбор этого текста, хотелось бы обойтись без текста, сразу в переменную, но может есть какие-нибудь другие варианты, может кто-то уже делал, может кто и подскажет..:-)
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974133
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХУ самодельный пинг не сделать. только " пинг адрес >текст"

По-хорошему не надо изобретать велосипед с заведомо кривыми колесами. Не предназначен фокс для таких задач. Лучше поискать готовую прогу, а ее логи разбирать фоксом.
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974226
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, правда не могу понять в чем кривизна..:-), и что такое делают сторонние программы чего не умеет фокс при создании лога...
вот набросок, думал что-нибудь есть пооригинальней, но мне и этого хватает...:-)
for i=1 to 255
!ping -a 192.168.1.i>x
!copy x+x1
endfor
заношу во временную таблицу и проверяю с существующими адресами, которые уже в таблице..
PS: такой подход из области "зачем", зачем писать под себя склад, если уже много программ написано, зачем играть в шахматы, если уже есть супер программа, зачем писать на фоксе, если говорят, что он уже закрыт и т.д... ну наверное страдаю анахраизмом...:-)
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974286
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1PS: такой подход из области "зачем", зачем писать под себя склад, если уже много программ написано, зачем играть в шахматы, если уже есть супер программа, зачем писать на фоксе, если говорят, что он уже закрыт и т.д... ну наверное страдаю анахраизмом...:-)
Вот обобщать только не надо. Про гвозди и микроскоп слышал? Вот такие философы потом пишут складской учет в Lotus Notes, пофиг что это система документооборота, накладная тоже документ. Или драйвера на .NET, пофиг что фрэймворк надо ставить и памяти он прилично отъедает.

Я написал "не предназначен" потому что нет в фоксе встроенных средств для решения подобных задач. Тут надо WinAPI использовать, а фокс с ним слабо дружит.

Но если очень хочется - можешь поизвращаться, гугли RAW сокет .
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974322
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1спасибо, правда не могу понять в чем кривизна..:-), и что такое делают сторонние программы чего не умеет фокс при создании лога...А разве речь о создании лога? Или таки о сканировании сети на предмет определения адресов? Или для Вас сии понятия тождественны?
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974363
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

Фокс слабо дружит или вы не дружите?

q1w1e1
Если вам хочется что-то пооригинальней чем ping.exe, то попробуйте освоить в WMI класс Win32_PingStatus, свойство StatusCode.
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974383
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я такое дела, правда давно. Вот откопал код, можешь его поковырять. тут еще определяло какой принтер подключен, но я это убрал, может где что не доглядел или лишне стер. IP адреса вытаскивал из доменных имен. Сначало получал список доменных имен, а потом по ним получал IP.

LOCAL loNetwork AS Object, loItem AS Object
IF Used("locDomains")
Use In locDomains
Endif

CREATE CURSOR LocDomains (ID C(12),DomainName C(20))
loNetwork = Getobject("WinNT:")
FOR EACH loItem IN loNetwork
INSERT INTO locDomains ;
(DomainName) ;
VALUES ;
(loItem.Name)
ENDFOR
LOCAL lcDomainID AS String, lcDomainName AS String
SELECT LocDomains
GO TOP

DO WHILE .NOT.EOF("LocDomains")
lcDomainID = LocDomains.Id
lcDomainName = RTRIM(LocDomains.DomainName)
loNetwork = Getobject("WinNT://"+lcDomainName)
FOR EACH loItem IN loNetwork
DO CASE
CASE loItem.Class = "Computer"
IF SEEK(ALLTRIM(loItem.Name),"DomenComp","CompName") = .F.
nStrokComper = nStrokComper + 1
INSERT INTO DomenComp ;
(ID, DomainName, CompName,IPComper) ;
VALUES ;
(nStrokComper ,lcDomainName ,loItem.Name ,"")
ENDIF
ENDCASE
ENDFOR
SKIP IN LocDomains
ENDDO
IF FILE(PathTableData+"DComputers.dbf")
IF USED("DComputers")
USE IN DComputers
ENDIF
IF USED("DomenComp")
SELECT DomenComp
SCAN
loSWbemServices = .NULL.
lcIpAddrHostName = GetIpHost(ALLTRIM(DomenComp.CompName))
IF EMPTY(lcIpAddrHostName) = .F.
InsIPComper = SUBSTR(lcIpAddrHostName,1,ATC("#",lcIpAddrHostName)-1)
REPLACE NEXT 1 IPComper WITH InsIPComper ,DateScan ;
WITH IIF(EMPTY(InsIPComper),DomenComp.DateScan,DATETIME()) IN DomenComp
ENDIF
ENDSCAN
ENDIF
ENDIF
= TABLEUPDATE(.F.,.T.,"DomenComp")

PROCEDURE SetObjRf
* SetObjRf.PRG - Set Object Referece.
*
* Copyright (c) 1997 Microsoft Corp.
* 1 Microsoft Way
* Redmond, WA 98052
*
* Description:
* Set an object reference to a specified property based on a specified class.
* Return new instance of specified class if name is an empty string.

LPARAMETERS toObject,tcName,tvClass,tvClassLibrary
LOCAL lcName,lcClass,lcClassLibrary,oObject,lnCount
LOCAL lnObjectRefIndex,lnObjectRefCount,oExistingObject

IF TYPE("toObject")#"O" OR ISNULL(toObject)
RETURN .NULL.
ENDIF
lcName=IIF(TYPE("tcName")=="C",ALLTRIM(tcName),LOWER(SYS(2015)))
oExistingObject=.NULL.
oObject=.NULL.
lcClassLibrary=""
DO CASE
CASE TYPE("tvClass")=="O"
oObject=tvClass
lcClass=LOWER(oObject.Class)
lcClassLibrary=LOWER(oObject.ClassLibrary)
IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ;
LOWER(oExistingObject.ClassLibrary)==lcClassLibrary
toObject.vResult=oExistingObject
RETURN toObject.vResult
ENDIF
CASE EMPTY(tvClass)
oObject=toObject
lcClass=LOWER(oObject.Class)
lcClassLibrary=LOWER(oObject.ClassLibrary)
IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ;
LOWER(oExistingObject.ClassLibrary)==lcClassLibrary
toObject.vResult=oExistingObject
RETURN toObject.vResult
ENDIF
OTHERWISE
lcClass=LOWER(ALLTRIM(tvClass))
DO CASE
CASE TYPE("tvClassLibrary")=="O"
lcClassLibrary=LOWER(tvClassLibrary.ClassLibrary)
CASE TYPE("tvClassLibrary")=="C"
IF EMPTY(tvClassLibrary)
lcClassLibrary=LOWER(toObject.ClassLibrary)
ELSE
lcClassLibrary=LOWER(ALLTRIM(tvClassLibrary))
IF EMPTY(JUSTEXT(lcClassLibrary))
lcClassLibrary=LOWER(FORCEEXT(lcClassLibrary,"vcx"))
ENDIF
llClassLib=(JUSTEXT(lcClassLibrary)=="vcx")
IF NOT "\"$lcClassLibrary
lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,JUSTPATH(toObject.ClassLibrary)))
IF NOT FILE(lcClassLibrary) AND VERSION(2)#0
lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,HOME()+"ffc\"))
IF NOT FILE(lcClassLibrary)
lcClassLibrary=LOWER(FULLPATH(JUSTFNAME(lcClassLibrary)))
ENDIF
ENDIF
ENDIF
IF NOT FILE(lcClassLibrary)
toObject.vResult=.NULL.
RETURN toObject.vResult
ENDIF
ENDIF
OTHERWISE
lcClassLibrary=""
ENDCASE
IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ;
LOWER(oExistingObject.ClassLibrary)==lcClassLibrary
toObject.vResult=oExistingObject
RETURN toObject.vResult
ENDIF
oObject=NEWOBJECT(lcClass,lcClassLibrary)
IF TYPE("oObject")#"O" OR ISNULL(oObject)
toObject.vResult=.NULL.
RETURN toObject.vResult
ENDIF
ENDCASE
DO CASE
CASE EMPTY(lcName)
toObject.vResult=oObject
RETURN toObject.vResult
OTHERWISE
IF NOT toObject.AddProperty(lcName,oObject)
oObject=.NULL.
ENDIF
ENDCASE
IF ISNULL(oObject)
toObject.vResult=.NULL.
RETURN toObject.vResult
ENDIF
IF PEMSTATUS(oObject,"oHost",5)
oObject.oHost=toObject.oHost
ELSE
oObject.AddProperty("oHost",toObject.oHost)
ENDIF
IF EMPTY(lcClassLibrary)
lcClassLibrary=LOWER(oObject.ClassLibrary)
ENDIF
lnObjectRefCount=toObject.nObjectRefCount
lnObjectRefIndex=lnObjectRefCount+1
FOR lnCount = 1 TO lnObjectRefCount
IF toObject.aObjectRefs[lnCount,1]==LOWER(lcName)
lnObjectRefIndex=lnCount
EXIT
ENDIF
ENDFOR
IF lnObjectRefIndex>lnObjectRefCount
DIMENSION toObject.aObjectRefs[lnObjectRefIndex,3]
ENDIF
toObject.aObjectRefs[lnObjectRefIndex,1]=LOWER(lcName)
toObject.aObjectRefs[lnObjectRefIndex,2]=lcClass
toObject.aObjectRefs[lnObjectRefIndex,3]=lcClassLibrary
toObject.vResult=oObject
RETURN toObject.vResult
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974384
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я такое дела, правда давно. Вот откопал код, можешь его поковырять. тут еще определяло какой принтер подключен, но я это убрал, может где что не доглядел или лишне стер. IP адреса вытаскивал из доменных имен. Сначало получал список доменных имен, а потом по ним получал IP.

LOCAL loNetwork AS Object, loItem AS Object
IF Used("locDomains")
Use In locDomains
Endif

CREATE CURSOR LocDomains (ID C(12),DomainName C(20))
loNetwork = Getobject("WinNT:")
FOR EACH loItem IN loNetwork
INSERT INTO locDomains ;
(DomainName) ;
VALUES ;
(loItem.Name)
ENDFOR
LOCAL lcDomainID AS String, lcDomainName AS String
SELECT LocDomains
GO TOP

DO WHILE .NOT.EOF("LocDomains")
lcDomainID = LocDomains.Id
lcDomainName = RTRIM(LocDomains.DomainName)
loNetwork = Getobject("WinNT://"+lcDomainName)
FOR EACH loItem IN loNetwork
DO CASE
CASE loItem.Class = "Computer"
IF SEEK(ALLTRIM(loItem.Name),"DomenComp","CompName") = .F.
nStrokComper = nStrokComper + 1
INSERT INTO DomenComp ;
(ID, DomainName, CompName,IPComper) ;
VALUES ;
(nStrokComper ,lcDomainName ,loItem.Name ,"")
ENDIF
ENDCASE
ENDFOR
SKIP IN LocDomains
ENDDO
IF FILE(PathTableData+"DComputers.dbf")
IF USED("DComputers")
USE IN DComputers
ENDIF
IF USED("DomenComp")
SELECT DomenComp
SCAN
loSWbemServices = .NULL.
lcIpAddrHostName = GetIpHost(ALLTRIM(DomenComp.CompName))
IF EMPTY(lcIpAddrHostName) = .F.
InsIPComper = SUBSTR(lcIpAddrHostName,1,ATC("#",lcIpAddrHostName)-1)
REPLACE NEXT 1 IPComper WITH InsIPComper ,DateScan ;
WITH IIF(EMPTY(InsIPComper),DomenComp.DateScan,DATETIME()) IN DomenComp
ENDIF
ENDSCAN
ENDIF
ENDIF
= TABLEUPDATE(.F.,.T.,"DomenComp")

PROCEDURE SetObjRf
* SetObjRf.PRG - Set Object Referece.
*
* Copyright (c) 1997 Microsoft Corp.
* 1 Microsoft Way
* Redmond, WA 98052
*
* Description:
* Set an object reference to a specified property based on a specified class.
* Return new instance of specified class if name is an empty string.

LPARAMETERS toObject,tcName,tvClass,tvClassLibrary
LOCAL lcName,lcClass,lcClassLibrary,oObject,lnCount
LOCAL lnObjectRefIndex,lnObjectRefCount,oExistingObject

IF TYPE("toObject")#"O" OR ISNULL(toObject)
RETURN .NULL.
ENDIF
lcName=IIF(TYPE("tcName")=="C",ALLTRIM(tcName),LOWER(SYS(2015)))
oExistingObject=.NULL.
oObject=.NULL.
lcClassLibrary=""
DO CASE
CASE TYPE("tvClass")=="O"
oObject=tvClass
lcClass=LOWER(oObject.Class)
lcClassLibrary=LOWER(oObject.ClassLibrary)
IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ;
LOWER(oExistingObject.ClassLibrary)==lcClassLibrary
toObject.vResult=oExistingObject
RETURN toObject.vResult
ENDIF
CASE EMPTY(tvClass)
oObject=toObject
lcClass=LOWER(oObject.Class)
lcClassLibrary=LOWER(oObject.ClassLibrary)
IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ;
LOWER(oExistingObject.ClassLibrary)==lcClassLibrary
toObject.vResult=oExistingObject
RETURN toObject.vResult
ENDIF
OTHERWISE
lcClass=LOWER(ALLTRIM(tvClass))
DO CASE
CASE TYPE("tvClassLibrary")=="O"
lcClassLibrary=LOWER(tvClassLibrary.ClassLibrary)
CASE TYPE("tvClassLibrary")=="C"
IF EMPTY(tvClassLibrary)
lcClassLibrary=LOWER(toObject.ClassLibrary)
ELSE
lcClassLibrary=LOWER(ALLTRIM(tvClassLibrary))
IF EMPTY(JUSTEXT(lcClassLibrary))
lcClassLibrary=LOWER(FORCEEXT(lcClassLibrary,"vcx"))
ENDIF
llClassLib=(JUSTEXT(lcClassLibrary)=="vcx")
IF NOT "\"$lcClassLibrary
lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,JUSTPATH(toObject.ClassLibrary)))
IF NOT FILE(lcClassLibrary) AND VERSION(2)#0
lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,HOME()+"ffc\"))
IF NOT FILE(lcClassLibrary)
lcClassLibrary=LOWER(FULLPATH(JUSTFNAME(lcClassLibrary)))
ENDIF
ENDIF
ENDIF
IF NOT FILE(lcClassLibrary)
toObject.vResult=.NULL.
RETURN toObject.vResult
ENDIF
ENDIF
OTHERWISE
lcClassLibrary=""
ENDCASE
IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ;
LOWER(oExistingObject.ClassLibrary)==lcClassLibrary
toObject.vResult=oExistingObject
RETURN toObject.vResult
ENDIF
oObject=NEWOBJECT(lcClass,lcClassLibrary)
IF TYPE("oObject")#"O" OR ISNULL(oObject)
toObject.vResult=.NULL.
RETURN toObject.vResult
ENDIF
ENDCASE
DO CASE
CASE EMPTY(lcName)
toObject.vResult=oObject
RETURN toObject.vResult
OTHERWISE
IF NOT toObject.AddProperty(lcName,oObject)
oObject=.NULL.
ENDIF
ENDCASE
IF ISNULL(oObject)
toObject.vResult=.NULL.
RETURN toObject.vResult
ENDIF
IF PEMSTATUS(oObject,"oHost",5)
oObject.oHost=toObject.oHost
ELSE
oObject.AddProperty("oHost",toObject.oHost)
ENDIF
IF EMPTY(lcClassLibrary)
lcClassLibrary=LOWER(oObject.ClassLibrary)
ENDIF
lnObjectRefCount=toObject.nObjectRefCount
lnObjectRefIndex=lnObjectRefCount+1
FOR lnCount = 1 TO lnObjectRefCount
IF toObject.aObjectRefs[lnCount,1]==LOWER(lcName)
lnObjectRefIndex=lnCount
EXIT
ENDIF
ENDFOR
IF lnObjectRefIndex>lnObjectRefCount
DIMENSION toObject.aObjectRefs[lnObjectRefIndex,3]
ENDIF
toObject.aObjectRefs[lnObjectRefIndex,1]=LOWER(lcName)
toObject.aObjectRefs[lnObjectRefIndex,2]=lcClass
toObject.aObjectRefs[lnObjectRefIndex,3]=lcClassLibrary
toObject.vResult=oObject
RETURN toObject.vResult
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974504
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед Евгений,

Спасибо
...
Рейтинг: 0 / 0
подскажите алгоритм поиска
    #38974816
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как посоветовали использовал WMI класс Win32_PingStatus, свойство StatusCode. Спасибо за пример Ю. Шутенко, который взял за основу...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / подскажите алгоритм поиска
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]