|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
хотелось бы пропинговать локальную сеть и занести ip адреса в таблицу, то что есть всякие утилиты сканеры сети, знаю, они мне не нужны(т.к. для себя наваял программку учет ip адресов и хотелось бы эту функцию в свою программку добавить...)... у меня всего две подсети 1 и 2(делал сеть не я, и неизвестно кто, постоянно появляются какие-то не учтенные ip) Первое что приходит, это пинг адрес >текст, и потом разбор этого текста, хотелось бы обойтись без текста, сразу в переменную, но может есть какие-нибудь другие варианты, может кто-то уже делал, может кто и подскажет..:-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 10:02 |
|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
ИМХУ самодельный пинг не сделать. только " пинг адрес >текст" По-хорошему не надо изобретать велосипед с заведомо кривыми колесами. Не предназначен фокс для таких задач. Лучше поискать готовую прогу, а ее логи разбирать фоксом. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 11:54 |
|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
спасибо, правда не могу понять в чем кривизна..:-), и что такое делают сторонние программы чего не умеет фокс при создании лога... вот набросок, думал что-нибудь есть пооригинальней, но мне и этого хватает...:-) for i=1 to 255 !ping -a 192.168.1.i>x !copy x+x1 endfor заношу во временную таблицу и проверяю с существующими адресами, которые уже в таблице.. PS: такой подход из области "зачем", зачем писать под себя склад, если уже много программ написано, зачем играть в шахматы, если уже есть супер программа, зачем писать на фоксе, если говорят, что он уже закрыт и т.д... ну наверное страдаю анахраизмом...:-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 12:59 |
|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
q1w1e1PS: такой подход из области "зачем", зачем писать под себя склад, если уже много программ написано, зачем играть в шахматы, если уже есть супер программа, зачем писать на фоксе, если говорят, что он уже закрыт и т.д... ну наверное страдаю анахраизмом...:-) Вот обобщать только не надо. Про гвозди и микроскоп слышал? Вот такие философы потом пишут складской учет в Lotus Notes, пофиг что это система документооборота, накладная тоже документ. Или драйвера на .NET, пофиг что фрэймворк надо ставить и памяти он прилично отъедает. Я написал "не предназначен" потому что нет в фоксе встроенных средств для решения подобных задач. Тут надо WinAPI использовать, а фокс с ним слабо дружит. Но если очень хочется - можешь поизвращаться, гугли RAW сокет . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 13:42 |
|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
q1w1e1спасибо, правда не могу понять в чем кривизна..:-), и что такое делают сторонние программы чего не умеет фокс при создании лога...А разве речь о создании лога? Или таки о сканировании сети на предмет определения адресов? Или для Вас сии понятия тождественны? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 14:24 |
|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
Dima T Фокс слабо дружит или вы не дружите? q1w1e1 Если вам хочется что-то пооригинальней чем ping.exe, то попробуйте освоить в WMI класс Win32_PingStatus, свойство StatusCode. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 14:59 |
|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
Я такое дела, правда давно. Вот откопал код, можешь его поковырять. тут еще определяло какой принтер подключен, но я это убрал, может где что не доглядел или лишне стер. 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 15:20 |
|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
Я такое дела, правда давно. Вот откопал код, можешь его поковырять. тут еще определяло какой принтер подключен, но я это убрал, может где что не доглядел или лишне стер. 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 15:21 |
|
подскажите алгоритм поиска
|
|||
---|---|---|---|
#18+
Дед Евгений, Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 17:15 |
|
|
start [/forum/topic.php?fid=41&gotonew=1&tid=1582353]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
13ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 411ms |
0 / 0 |