среда, 27 мая 2009 г.

Ющенко своим указом уволил Билла Гейтса

Билл Гейтс. Фото ©AFP




Билл Гейтс. Фото ©AFP



Президент Украины Виктор Ющенко своим указом вывел из состава консультативного совета по вопросам иностранных инвестиций основателя корпорации Microsoft Билла Гейтса. Об этом сообщает издание "Обком", приводящее текст указа.

Билл Гейтс дал согласие на включение в состав совета в 2005 году. Консультантом Ющенко он стал, будучи председателем совета директоров Microsoft. Гейтс покинул эту должность в Microsoft в 2008 году.


Вместе с Гейтсом из состава совета были выведены председатель Партии регионов Украины Виктор Янукович, глава объединения "Фронт перемен" Арсений Яценюк, министр экономики республики Анатолий Кинах, один из лидеров Партии регионов Николай Азаров и еще несколько человек.


В то же время теперь в совет включены председатель Верховной рады Украины Владимир Литвин, премьер-министр Юлия Тимошенко и глава секретариата президента Вера Ульянченко.


Консультативный совет по инвестициям существует на Украине с 1997 года. Также в течение нескольких лет при президенте действовала палата независимых экспертов по вопросам иностранных инвестиций.




понедельник, 25 мая 2009 г.

На фестивале linux install fest

24 мая 2009 года успешно прошёл фестиваль linux install fest.
На данный фестиваль пришло человек 200, а то и больше.
К сожалению я не смог что-либо сфотографировать.
Фестиваль был не сильно захватывающим, но интересным,
также там присутствовали люди не знающие, что такое линукс.
Этим людям объяснили в кратце о линуксе. То что в принципе некоторым известно. А именно: возможности ОС линукс, отличие gimp от photoshop, показывали возможности openoffice 3.0. Также рассказали про ОС ReactOS (впечатление не очень).Но как обещали там бесплатно раздавали дистрибутивы. Я решил взять себе slax.
Вроде бы отличный дистрибудив.
Ещё дали GParted.
Кто хочет могу скинуть slax или gparted.
Пишите на jabber: jython@jabber.ru или на gmail: jython1@gmail.com.

Фотограрафии можно посмотреть на этом сайте

четверг, 21 мая 2009 г.

Алгогритм шифрования RSA

Алгоритм шифрования RSA на языке программирования python

def gcd (a, b):
"Compute GCD of two numbers"

if b == 0: return a
else: return gcd(b, a % b)

def multiplicative_inverse(a, b):
""" Find multiplicative inverse of a modulo b (a > b)
using Extended Euclidean Algorithm """

origA = a
X = 0
prevX = 1
Y = 1
prevY = 0

while b != 0:

temp = b
quotient = a/b
b = a % b
a = temp

temp = X
a = prevX - quotient * X
prevX = temp

temp = Y
Y = prevY - quotient * Y
prevY = temp

return origA + prevY

def generateRSAKeys(p, q):
"Generate RSA Public and Private Keys from prime numbers p & q"

n = p * q
m = (p - 1) * (q - 1)

# Generate a number e so that gcd(n, e) = 1, start with e = 3
e = 3

while 1:

if gcd(m, e) == 1: break
else: e = e + 2

# start with a number d = m/e will be atleast 1

d = multiplicative_inverse(m, e)

# Return a tuple of public and private keys
return ((n,e), (n,d))

if __name__ == "__main__":

print "RSA Encryption algorithm...."
p = long(raw_input("Enter the value of p (prime number):"))
q = long(raw_input("Enter the value of q (prime number):"))

print "Generating public and private keys...."
(publickey, privatekey) = generateRSAKeys(p, q)

print "Public Key (n, e) =", publickey
print "Private Key (n, d) =", privatekey

n, e = publickey
n, d = privatekey

input_num = long(raw_input("Enter a number to be encrypted:"))
encrypted_num = (input_num ** e) % n
print "Encrypted number using public key =", encrypted_num
decrypted_num = encrypted_num ** d % n
print "Decrypted (Original) number using private key =", decrypted_num

Colored with dumpz.org

Colored with dumpz.org



Алгоритм RSA (Rivast, Shamir и Adelman, 1977 год) предполагает, что посланное закодированное сообщение может быть прочитано адресатом и только им. В этом алгоритме используется два ключа - открытый и секретный. Данный алгоритм привлекателен также в случае, когда большое число субъектов (N) должно общаться по схеме все-со-всеми. В случае симметричной схемы шифрования каждый из субъектов каким-то образом должен доставить свои ключи всем остальным участникам обмена, при этом суммарное число используемых ключей будет достаточно велико при большом значении N. Применение асимметричного алгоритма требует лишь рассылки открытых ключей всеми участниками, суммарное число ключей равно N.

Сообщение представляется в виде числа M. Шифрование осуществляется с помощью общедоступной функции f(M), и только адресату известно, как выполнить операцию f-1. Адресат выбирает два больших простых (prime) числа p и q, которые делает секретными. Он объявляет n=pq и число d, c (d,p-1)=(d,q-1)=1 (один из возможных способов выполнить это условие, выбрать d больше чем p/2 и q/2). Шифрование производится по формуле:

f(M) ≡ Md mod n,

где M и f(M) оба ≤ n-1. Как было показано, может быть вычислено за разумное время, даже если M, d и n содержит весьма большое число знаков. Адресат вычисляет M на основе Md, используя свое знание p и q. В соответствие со следствием 6, если

dc ≡ (p-1)1, тогда (Md)e ≡ p1.

Исходный текст M получается адресатом из зашифрованного F(M) путем преобразования: M = (F(M))e (mod pq). Здесь как исходный текст, так и зашифрованный рассматриваются как длинные двоичные числа.

Аналогично (Md)e ≡ qM, если dc ≡ (q-1)1. e удовлетворяет этим двум условиям, если cd ≡ (p-1) (q-1)1. Теорема 1 гласит, что мы можем позволить e=x, когда x является решением уравнения dx + (p-1)(q-1)y = 1.

Так как (Md)e - M делимо на p и q, оно делимо и на pq, следовательно, мы можем определить M, зная Md, вычислив его значение в степени e и определив остаток от деления на pq. Для соблюдения секретности важно, чтобы, зная n, было нельзя вычислить p и q. Если n содержит 100 цифр, подбор шифра связан с перебором ~1050 комбинаций. Данная проблема изучается уже около 100 лет. RSA-алгоритм запатентован (20 сентября 1983, действует до 2000 года).

Теоретически можно предположить, что возможно выполнение операции f-1, не вычисляя p и q. Но в любом случае задача эта не проста и разработчики считают ее трудно факторизуемой.

Предположим, что мы имеем зашифрованный текст f(M) и исходный текст M, и мы хотим найти значения p и q. Нетрудно показать, что таких исходных данных для решения задачи недостаточно - надо знать все возможные значения Mi.

Проясним использование алгоритма RSA на конкретном примере. Выбираем два простые числа p=7; q=17 (на практике эти числа во много раз длиннее). В этом случае n = p*q будет равно 119. Теперь необходимо выбрать e, выбираем e=5. Следующий шаг связан с формированием числа d так, чтобы d*e=1 mod [(p-1)(q-1)]. d=77 (использован расширенный алгоритм Эвклида). d - секретный ключ, а e и n характеризуют открытый ключ. Пусть текст, который нам нужно зашифровать представляется M=19. С = Memod n. Получаем зашифрованный текст C=66. Этот “текст” может быть послан соответствующему адресату. Получатель дешифрует полученное сообщение, используя М= Cdmod n и C=66. В результате получается M=19.

На практике общедоступные ключи могут помещаться в специальную базу данных. При необходимости послать партнеру зашифрованное сообщение можно сделать сначала запрос его открытого ключа. Получив его, можно запустить программу шифрации, а результат ее работы послать адресату. На использовании общедоступных ключей базируется и так называемая электронная подпись, которая позволяет однозначно идентифицировать отправителя. Сходные средства могут применяться для предотвращения внесения каких-либо корректив в сообщение на пути от отправителя к получателю. Быстродействующие аппаратные 512-битовые модули могут обеспечить скорость шифрования на уровне 64 кбит в сек. Готовятся ИС, способные выполнять такие операции со скоростью 1 Мбайт/сек. Разумный выбор параметра e позволяет заметно ускорить реализацию алгоритма.

среда, 20 мая 2009 г.

Фестиваль Линукс в Ставрополе

24 мая 2009 года, в 11-00, первый раз в Ставрополе
состоится Linux Install Fest.
Цель этого фестиваля состоит в том, чтобы показать возможности
операционной системы GNU/Linux и Свободного программного обеспечения.
Фестиваль организован пользователями Linux, при поддержке Северо-Кавказской Группы Пользователей Linux.

У вас будет возможность ознакомиться, задать вопросы или установить дистрибутив.
Вам нужно будет иметь ноутбук или компьютер для установки. Дистрибутивы
раздаются бесплатно, но их количество ограничено.Поэтому, желательно
принести с собой болванки (CD-, DVD-R), чтобы получить свежие релизы дистрибутивов.

Место проведения будет разбито на несколько зон:

* Секция установки. Группа компьютеров с питанием, проводной сетью, несколькими мониторами/клавиатурами/мышами для пришедших со своими настольными компьютерами.
* Демонстрационная зона. Здесь мы постараемся предоставить доступ к уже готовым, установленным и настроенным системам для желающих просто посмотреть что такое Linux.
* Зона презентаций. Здесь гостям фестиваля будет предложено прослушать подготовленые организаторами материалы:
** Linux — как полноценная домашняя операционная система.
BigBuckBunny — демонстрация мультфильма, сделанного на полностью свободном ПО
** Linux — сетевая рабочая машина, высокая защищенность от вирусов.
** Linux в офисе.
** Linux — на мобильных устройствах.
** Linux — серверные решения.

На фестиваль принесут следующие димтрибутивы

* ArchLinux
* ASPLinux 12
* BackTrack 4 beta
* Damn Vulnerable Linux 1.5
* Debian
* Fedora 10
* Gentoo
* gparted-live-0.4.4-1
* kUbuntu 9.04
* Mandriva 2009 Free (Кому нужен Power Pack, обращайтесь в маг. Pascal)
* MOPSLinux 6.2
* nUbuntu 8.12
* OpenSUSE 11.1
* Sabayon Linux
* Slackware 12.2
* STD 0.1 (Knoppix)
* Ubuntu 9.04

Место проведения: Ставрополь,
переулок Черняховского, 3 — Колледж связи (бывший «Электротехникум»)
Проезд: маршрутки - 3, 4, 7, 19, 29, 46; автобусы - 4, 7, 46; троллейбусы - 3, 4.


Подробнее: здесь

Создание FTP сервера на базе ProFTPd с проверкой на вирусы через ClamAV

В последнее время наблюдается бурный рост так называемых домашних сетей.
Многие, (да что там многие) практически все провайдеры предоставляют
службы для обмена файлами. Но среди общей массы пользователей
встречаются такие, которые не останавливаются на достигнутом. Видите ли
подавай им собственные ресурсы, рассчитанные на пользователей сети и
обеспечивающей кучу дополнительных функций и удобств. Так на пример в
домашних локальных сетях очень часто встречаются такие службы, как
собственные почтовые, игровые, файловые и прочие сервера обычно
работающие на старых (или не очень), выделенных специально для этого
компьютерах с режимом работы по схеме 24х8, хотя не редко можно
встретить и рабочие станции с аналогичными службами, но работающие с
перерывами, так сказать когда владелец дома.

Речь в этой маленькой заметке пойдет о FTP сервере ProFTPd его базовой
настройке для предоставления анонимного доступа пользователей домашней
сети и сетей имеющих пиринговые отношения с ней. Но мой рассказ был бы
совсем не отличим от десятков подобных, если бы повествовал только об
настройке ProFTPd. Большинство серверов работающих с этой замечательной
службой имеют возможность как скачки так и закачки файлов и как
возможность - получение в папку Upload какого-либо вредоносного
программного кода. Но как известно демон ProFTPd является модульным и
поддерживает интеграцию с широко известным, свободно распространяемом
антивирусом ClamAV. К тому же, если на нашем предполагаемом сервере так
же закрутить почту, то можно попутно проверять проходящий почтовый
трафик на вирусы. Чтож, если вам нравиться эта идея, тогда поехали.

Итак, цель данной статьи - показать небольшие хитрости в настройке
связки FTP сервера ProFTPd и антивируса ClamAV для предоставления
доступа пользователям домашних локальных сетей к FTP поднятому на
домашнем сервере, c установленной на нем source-based операционной
системе Gentoo Linux. Так же в этой заметке не будет описано никаких
вариантов получения доступа кроме анонимного, т.к. в большинстве случаев
этого достаточно. Единственное что будет ограничивать доступ к службе -
IP адрес клиента. Это необходимо сделать, для того чтобы к нашему
серверу не подключались люди из Интернета (в случае реального IP) и
сетей с которыми не установлены пиринговые соглашения нашего провайдера
(и как результат - платный трафик).

Будем считать, что ваш сервер собран, настроен и на нем уже крутится
Gentoo, но не установлен ни ClamAV, ни ProFTPd. Что ж, это вполне
нормально, начнем мы собственно с установки и настройки антивируса. В
Gentoo это достаточно просто и практически не требует огромного
количества серого вещества:

emerge - pv clamav


Проверяем опции с которыми собирается ClamAV, смотрим все ли нас
устраивает и если все нормально, то просто повторяем команду без ключей "-pv"

Далее просто ждем пока антивирус не скачается, соберется и
инсталлируется, о чем на будет дополнительно сообщено на экране. Все
нормально ??? Тогда приступаем к его конфигурированию и запуску. Тут в
принципе наука то же не особенно большая. Смотрим в файл конфига и
внимательно читаем комментарии к опциям. Мне кажется что этого будет
достаточно для запуска службы:

/etc/clamd.conf

LogFile /var/log/clamav/clamd.log
LogTime
LogVerbose
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /tmp
DatabaseDirectory /var/lib/clamav
LocalSocket /var/run/clamav/clamd
FixStaleSocket
MaxConnectionQueueLength 30
User clamav
AllowSupplementaryGroups
ScanArchive
ArchiveMaxRecursion 2
ScanRAR
ArchiveMaxFileSize 50M
ArchiveMaxFiles 15000


Обратите внимание, я намеренно не стал запускать ClamAV на TCP порту,
т.к считаю что во многих случаях это упрощает работу, но если вам
необходимо проверять вирусы с удаленных машин или вам хочется
поморочиться с TCP, то конечно, какие могут быть вопросы, ваша система,
что хотите то с ней и делайте :) Но все же я бы дал маленькую
рекомендацию: Если вы уж и собрались запускать службу на TCP порту и
если не собираетесь предоставлять ее внешним пользователям, так хотя бы
запускайте ее на "локальной петле". Это будет на много безопасней.

Таааак, теперь нам необходимо ежедневно и по графику обновлять
антивирусные базы. Что же делать ? Но и тут разработчики ClamAV пошли
нам на встречу, создав демон FreshClam, который по заданному графику
будет обновлять вирусную информацию. Обычно он идет в комплекте с
антивирусом и собирается из исходных текстов вместе с ClamAV, а значит
нам всего лишь нужно подправить файл конфигурации.

/etc/freshclam.conf

DatabaseDirectory /var/lib/clamav
UpdateLogFile /var/log/clamav/freshclam.log
PidFile /var/run/clamav/freshclam.pid
DatabaseOwner clamav
DatabaseMirror database.clamav.net
Checks 24


Обратите внимание, я привожу в пример строки файла конфигурации без
комментариев. Это делается намеренно по двум причинам. Первая причина -
чтобы не раздувать наше маленькое повествование, ну и вторая причина -
это то что все строки в оригинальном файле freshclam.conf очень подробно
описаны (правда на английском (если вы на нем не читаете, то что вы
забыли в Linux ??? ))

Все, приступаем к запуску.

/etc/init.d/clamd start

* Caching service dependencies ... [OK]
* Starting clamd ... [OK]
* Starting freshclam ... [OK]


Если видим эту картину, то все у нас замечательно и оба демона
запустились. Для того чтобы до конца убедиться что все работает смотрим
логи и видим там:

/var/log/clamav

Thu Feb 2 10:10:37 2006 -> +++ Started at Thu Feb 2 10:10:37 2006
Thu Feb 2 10:10:37 2006 -> clamd daemon 0.88 (OS: linux-gnu, ARCH: i386, CPU: i386)
Thu Feb 2 10:10:37 2006 -> Log file size limited to 1048576 bytes.
Thu Feb 2 10:10:37 2006 -> Verbose logging activated.
Thu Feb 2 10:10:37 2006 -> Running as user clamav (UID 101, GID 408)
Thu Feb 2 10:10:37 2006 -> Reading databases from /var/lib/clamav
Thu Feb 2 10:10:44 2006 -> Protecting against 43895 viruses.
Thu Feb 2 10:10:44 2006 -> Unix socket file /var/run/clamav/clamd
Thu Feb 2 10:10:44 2006 -> Setting connection queue length to 30
Thu Feb 2 10:10:44 2006 -> Listening daemon: PID: 21378
Thu Feb 2 10:10:44 2006 -> Archive: Archived file size limit set to 52428800 bytes.
Thu Feb 2 10:10:44 2006 -> Archive: Recursion level limit set to 8.
Thu Feb 2 10:10:44 2006 -> Archive: Files limit set to 15000.
Thu Feb 2 10:10:44 2006 -> Archive: Compression ratio limit set to 250.
Thu Feb 2 10:10:44 2006 -> Archive support enabled.
Thu Feb 2 10:10:44 2006 -> Archive: RAR support enabled.
Thu Feb 2 10:10:44 2006 -> Portable Executable support enabled.
Thu Feb 2 10:10:44 2006 -> Mail files support enabled.
Thu Feb 2 10:10:44 2006 -> OLE2 support enabled.
Thu Feb 2 10:10:44 2006 -> HTML support enabled.
Thu Feb 2 10:10:44 2006 -> Self checking every 1800 seconds.


Ну и как контрольный выстрел в голову: netstat -l

Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 3419811 /var/run/clamav/clamd


Ура, вроде все заработало !!!

И конечно же добавляем все это в автозагрузку:

rc-update add clamav default


Теперь настала пора разбираться с ProFTPd. Тут нас ждут не совсем
приятные сюрпризы. Дело в том что модуль, который проверяет файлы
проходящие по FTP протоколу с/на нашу машину писался сторонними
разработчиками и по этому добавление его в в систему вызовет некоторые
проблемы. Что за проблемы спросите вы ??? Все очень просто, обычно для
установки пакетов в Gentoo используется команда emerge, которая
выполняет комплекс действий, таких как скачивание, проверка контрольных
сумм, распаковка, сборка и прочие действия. В нашем же случае модуль не
входит в пакет и следовательно не будет скомпилирован вместе с демоном.
Простая добавка его в архив с дистрибутивом вызовет несовпадение
контрольных сумм Не беда воскликнут люди привыкшие работать с FreeBSD,
скачаем сырцы, соберем демон ручной работы, напишем стартовые скрипты
сами и будем счастливы !!! Но это не наш метод. Все это конечно
правильно и контролируемо, но я например считаю себя немного лентяем.
Зачем делать руками, если за тебя может многое сделать система. И так
самое интересное.

В одной консоли собираем ProFTPd по умолчанию !!!

emerge -pv proftpd


Добавляем или убираем все необходимые параметры и записываем их на
бумажку, т.к. потом они нам понадобятся. Среди них я бы на всякий случай
включил +pam и +mysql, пущай будут, мало ли что нам понадобиться.
Например аутентифицировать привилегированных пользователей или
что-нибудь хранить в базе, статистику или еще чего.

Открываем вторую консоль.

Обратите внимание, началась ли сборка в первой консоле и если процесс
прошел стадию скачивания, то во второй консоли идем в директорию

/usr/portage/distfiles


и находим там архив с сырцами ProFTPd. Копируем его во временно
созданную папку, распаковываем и читаем инструкцию по установке. После
этого идем на сайт демона, в раздел дополнительных модулей и ищем модуль
mod_clamav. Либо сразу идем по ссылке:

http://www.uglyboxindustries.com/mod_clamav.html


и тянем его оттуда. По инструкции, для сборки с ProFTPd с какими-либо
модулями они должны быть помещены в папку /contrib в директории куда
распаковали архив дистрибутива. После чего можно приступить к
конфигурированию и сборке. И так в папке с распакованным
дистрибутивом.......

./configure --help > configure.hlp


Смотрим что там внутри, вспоминаем ключики которые мы записали на
бумажку в предыдущем абзаце и смотрим как правильно все это подключить.
Получилось вот что:

./configure --with-modules=mod_ratio:mod_auth_pam:mod_tls:mod_readme:mod_wrap: \\ mod_sql: mod_sql_mysql:mod_clamav \
--with-includes=/usr/include/mysql --enable-ncurses


Вот такая длиннющая строка, остальное если мне не изменяет память должно
само срастись :) После завершения работы скрипта конфигурации как всегда
делаем make.

Далее сборка и по ее завершению мы получаем демон с вкомпилированным в
него дополнительным модулем. Так, смотрим на первую консоль. Что видим
??? Ага, сборка по умолчанию закончилась, пакет установился и с виду все
нормально. Отлично, теперь необходимо пойти в каталог с демоном, а это:

/usr/sbin/proftpd


и сделать его копию в какую-нибудь папку. Вернемся во вторую консоль и
посмотрим, не закончился ли процесс сборки. Так, закончился, очень
хорошо. Теперь нужно взять из папки собранный в ручную демон, который
находится в корне каталога с распакованным дистрибутивом и заменить им
демон собранный на автопилоте и на всякий случай нами забэкапленный.
Отлично, теперь мы имеем демон работающий с нестандартным модулем,
стартовые скрипты по умолчанию для данного демона, установленные по
нужным папкам библиотеки и прочий хлам. Что еще осталось ??? Добавить
ProFTPd в автозагрузку и исправить файл конфигурации. Первое:

rc-update add proftpd default


Второе. Тут все зависит от того что нам нужно, а нужен нам всего лишь
анонимный вход и права на папки Download - только чтение и Upload -
чтение и запись. Так же список разрешенных диапазонов IP адресов и
сеток.

В моем случае это выглядит примерно так:

ServerName "My FTP Server"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600
User ftp
Group ftp
UseReverseDNS off
ScoreboardFile /var/run/proftpd/proftpd
TransferLog /var/log/proftpd/xferlog.legacy
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"


Order allow,deny
Allow from xxx.xxx.xxx.xxx/xx # Пишим IP адреса кому можно подключаться.
Deny from all



AllowOverwrite yes
IdentLookups off
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth


# Включаем проверку
ClamAV on


#Делаем анонимный вход корневая папка /usr/ftp
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell no
MaxClients 5


AllowAll


DenyAll


#Папка Upload и права на нее

AllowAll


DenyAll



# Папка Download и права на нее

AllowAll


DenyAll





Вот такой не сложный конфиг. Что еще можно добавить ??? Наверное больше
ничего, хотя да, нужно же запустить демон и проверить его
работоспособность !!!

/etc/init.d/proftpd start

* Starting proftpd ...
- mod_clamav/0.3: info: loaded 44059 virus patterns [OK]


Вооооо, теперь все запустилось !!! Модуль нашел ClamAV и даже подцепил
его базы !!!

Отлично, на этом я думаю можно закончить мое повествование. Буду рад
любым замечаниям и комментариям, которые сразу же будут включены в
статью.

С уважением.
Фомичев Алексей

Любая перепечатка и распространение статьи возможна только со ссылкой на
автора. Все комментарии и предложения желательно отправлять на
электронный адрес

Как в программе на VB определить имя и IP-адрес компьютера?

Подготовте проект, добавив в него форму.
На форму поместите:
- Кнопку с именем cmdGetHost
- 2 текстовых поля с именами txtHostName и txtIpAddr
Добавте в форму:
Option Explicit
Private Const MAX_WSADescription = 256
Private Const MAX_WSASYSStatus = 128
Private Const ERROR_SUCCESS As Long = 0
Private Const WS_VERSION_REQD As Long = &H101
Private Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&
Private Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&
Private Const MIN_SOCKETS_REQD As Long = 1
Private Const SOCKET_ERROR As Long = -1
Private Type HOSTENT
hName As Long
hAliases As Long
hAddrType As Integer
hLen As Integer
hAddrList As Long
End Type
Private Type WSADATA
wVersion As Integer
wHighVersion As Integer
szDescription(0 To MAX_WSADescription) As Byte
szSystemStatus(0 To MAX_WSASYSStatus) As Byte
wMaxSockets As Integer
wMaxUDPDG As Integer
dwVendorInfo As Long
End Type
Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, ByVal dwHostLen As Long) As Long
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Public Function GetIPAddress() As String
Dim sHostName As String * 256
Dim lpHost As Long
Dim HOST As HOSTENT
Dim dwIPAddr As Long
Dim tmpIPAddr() As Byte
Dim i As Integer
Dim sIPAddr As String
If Not SocketsInitialize() Then
GetIPAddress = ""
Exit Function
End If
If gethostname(sHostName, 256) = SOCKET_ERROR Then
GetIPAddress = ""
MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name."
SocketsCleanup
Exit Function
End If
sHostName = Trim$(sHostName)
lpHost = gethostbyname(sHostName)
If lpHost = 0 Then
GetIPAddress = ""
MsgBox "Windows Sockets are not responding. " & "Unable to successfully get Host Name."
SocketsCleanup
Exit Function
End If
CopyMemory HOST, lpHost, Len(HOST)
CopyMemory dwIPAddr, HOST.hAddrList, 4
ReDim tmpIPAddr(1 To HOST.hLen)
CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen
For i = 1 To HOST.hLen
sIPAddr = sIPAddr & tmpIPAddr(i) & "."
Next
GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
SocketsCleanup
End Function
Public Function GetIPHostName() As String
Dim sHostName As String * 256
If Not SocketsInitialize() Then
GetIPHostName = ""
Exit Function
End If
If gethostname(sHostName, 256) = SOCKET_ERROR Then
GetIPHostName = ""
MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name."
SocketsCleanup
Exit Function
End If
GetIPHostName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1)
SocketsCleanup
End Function
Private Function HiByte(ByVal wParam As Integer)
HiByte = wParam \ &H1 And &HFF&
End Function
Private Function LoByte(ByVal wParam As Integer)
LoByte = wParam And &HFF&
End Function
Private Sub SocketsCleanup()
If WSACleanup() <> ERROR_SUCCESS Then
MsgBox "Socket error occurred in Cleanup."
End If
End Sub
Private Function SocketsInitialize() As Boolean
Dim WSAD As WSADATA
Dim sLoByte As String
Dim sHiByte As String
If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
MsgBox "The 32-bit Windows Socket is not responding."
SocketsInitialize = False
Exit Function
End If
If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
MsgBox "This application requires a minimum of " & CStr(MIN_SOCKETS_REQD) & " supported sockets."
SocketsInitialize = False
Exit Function
End If
If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
sHiByte = CStr(HiByte(WSAD.wVersion))
sLoByte = CStr(LoByte(WSAD.wVersion))
MsgBox "Sockets version " & sLoByte & "." & sHiByte & " is not supported by 32-bit Windows Sockets."
SocketsInitialize = False
Exit Function
End If
SocketsInitialize = True
End Function
' Использование
Private Sub cmdGetHost_Click()
txtHostName = GetIPHostName()
txtIpAddr = GetIPAddress()
End Sub
Мир программирования на Visual BASIC 5.0 и HTML

Что означают смайлики?

С помощью "смайликов" люди выражают свои чувства: смеются, плачут, издеваются.
ГЛАВНЫЕ
: -) Улыбка: это шутка (или улыбка в ответ на шутку)
;-) Подмигивание (видишь, я шучу)
: - ( Печаль, огорчение
: -> Сарказм.
: ) Улыбается
: ] Ухмыляется
: @ Кричит
: D Смеется
: I Думает
: ( Грустит
: [ Злобно усмехается
: O Громко говорит
: Q Курит
: * Целует
|I Спит
|O Зевает
: P Показывает язык
=) Всего хорошего
ИЗМЕНЯЕМ ВЫРАЖЕНИЕ РОТИКА
: -[ Злобная усмешка
: -E Вампир оскалил зубы
: -7 Только что не то ляпнул
: -* Целует
: -@ Кричит
: -# Оскалил зубы
: -& Завязал язык узлом
: -Q Курит
: -? Курит трубку
: -P Показывает язык
: -S Сказал что-то не то
: -D Громко смеется
: -X Крепко сжал губы
: -/ Настроен скептически
: -o О-го-го
: -9 Облизывает губы
: -0 Оратор
: -1 или: -! Все нормально
: -$ Рот зашит
: -% Банкир
: -q Пытается достать до носа языком
: -e Растерян, полная непонятка
: -t Злой и сердитый
: -i Ухмылка
: -] Идиот
: -[ Неулыбчивый идиот
: -} Бородатый
: -{ Усатый
: -j Улыбка перекошена налево
: -\ Нерешительность
: -| Хммммммм...
: -< Очень расстроен
: -x Поджал губы
: -v Болтун
: -b Показывает язык
ИЗМЕНЯЕМ НОСИК
: *) Пьяный в доску
: ^) Нос поломан
: v) Нос поломан в другую сторону
: _) Без носа
: <) Боксер
: =) Два носа
: o) Клоун
: u) Смешной нос
ИЗМЕНЯЕМ ГЛАЗА
%-) Смотрит на монитор уже 24 часа
8-) Носит солнечные очки
B-) Носит очки
ИЗМЕНЯЕМ ВЫРАЖЕНИЕ ВСЕГО ЛИЦА
|-I Спит
|^o Храпит
|-O Зевает
%-6 Сошел с ума
8-| Подозрителен
(8-o Напуган
>: -I Насупил брови
#-) Фестивалил всю ночь
ДОБАВЛЯЕМ НОВЫЕ ЭЛЕМЕНТЫ
:: -) Носит очки (четырехглазый)
B: -) Очки подняты на лоб
8: -) Маленькая девочка
: -)-8 Большая девочка
: -{) С усами
: -#) С густыми усами
{: -) Носит парик
}: -) Носит фуражку
: -)~ Пускает слюни
: -~) Простужен
: '-) Плачет от счастья
=: -) Носит пилотку
-: -) Панк
': -) Сбрита одна бровь
,: -) Сбрита другая бровь
O: -) Ангел
C=: -) Шеф-повар
*<: -) Дед Мороз
E-: -) Ди-джей
8: -) Волшебник
@: -) Носит чалму
[: -) Слушает плеер
: -)) Двойной подбородок
>: -) Дьявол
(: -) Большая улыбка
+: -) Священник
: -)X Носит галстук-бабочку
ПРОЧИЕ СМАЙЛИКИ
(-: Левша
[: ] Робот
: -{} Губы в помаде
: '- ( Плачет
<|-) Китаец
<|- ( Китаец, который не любит таких шуток
-: - ( Настоящие панки никогда не улыбаются
@= За ядерную войну
*: o) Клоун с бонбончиком
3: ] Собака улыбается
3: [ Собака оскаливает зубы
d8= Бородач в очках и бейсболке
(: I Цыпленок вылупился из яйца
: -: Мутант
Невидимка
X- ( Умер
[] Объятия
~~: - ( Волосы горят
O |-) Религиозен
8: -I Специалист по юниксу