Как получить мак адрес удаленного компьютера?
От: java_yyyka  
Дата: 21.12.09 22:52
Оценка:
12 часов убитого об стену времени не дали ничего
Просьба посоветовать...
Как можно определить мак адрес подключенных удаленных машин к серверу средствами java?
Что бы была возможность отслеживать конкретных пользователей не только по айпи. Согласен мак тоже не ахти что, но другого нету.
Постоянных соединений много(тысячи), сервер один.
Вот два варианта. Оба неработают, даже у сетевого интерфейса — нулл.
public String getHWID()
{
String HWIDD = "";
try
{
String address = getConnection().getSocket().getInetAddress().getHostName();
if (address == null) return HWIDD;
NetworkInterface ni = NetworkInterface.getByName(address);
if (ni != null) { byte[] mac = ni.getHardwareAddress(); if (mac != null) { HWIDD = Arrays.toString(mac); return HWIDD;} }

String address2 = getConnection().getSocket().getInetAddress().getHostAddress();
if (address2 == null) return HWIDD;
NetworkInterface ni2 = NetworkInterface.getByName(address2);
if (ni2 != null) { byte[] mac2 = ni2.getHardwareAddress(); if (mac2 != null) { HWIDD = Arrays.toString(mac2); return HWIDD;} }
} catch (SocketException e) { }
return HWIDD;
}


И совершеннно безумный вариант(для такой задачи), но даже он не работает аналогично.

private String getmacbad()
{
try
{
String address = getConnection().getSocket().getInetAddress().getHostAddress();
String macbad = "";
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets))
{
if (netint != null)
{
Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
for (InetAddress inetAddress : Collections.list( inetAddresses))
{
if (address.equals( inetAddress.getHostAddress() ) ) { macbad = Arrays.toString(netint.getHardwareAddress()); _log.warn("IPPP: " + address); return macbad; }
}
}
}
return macbad;
} catch (SocketException e) {return null; }
}
Re: Как получить мак адрес удаленного компьютера?
От: dotidot Россия  
Дата: 21.12.09 23:01
Оценка:
Здравствуйте, java_yyyka, Вы писали:

_>12 часов убитого об стену времени не дали ничего

_>Просьба посоветовать...
_>Как можно определить мак адрес подключенных удаленных машин к серверу средствами java?
_>Что бы была возможность отслеживать конкретных пользователей не только по айпи. Согласен мак тоже не ахти что, но другого нету.
_>Постоянных соединений много(тысячи), сервер один.
если речь не про локальную подсеть, то никак.
Re: Как получить мак адрес удаленного компьютера?
От: dotidot Россия  
Дата: 21.12.09 23:03
Оценка:
Здравствуйте, java_yyyka, Вы писали:

_>12 часов убитого об стену времени не дали ничего

если вы автор клиентского ПО, то можете сделать соотв интерфейс, ну или SNMP agent в ОС поднять(но это через голый интернет не кошерно, лучше сначала VPN)
Re: Как получить мак адрес удаленного компьютера?
От: C0s Россия  
Дата: 21.12.09 23:53
Оценка:
Здравствуйте, java_yyyka, Вы писали:

_>Как можно определить мак адрес подключенных удаленных машин к серверу средствами java?

_>Что бы была возможность отслеживать конкретных пользователей не только по айпи. Согласен мак тоже не ахти что, но другого нету.

как тут уже сказали, более-менее возможно (но, скорее всего, запуском cmd-line утилит, а не удобными java-объектами стандартной библиотеки) только в пределах своей подсети.
в остальных случаях почти всегда ответ "не выйдет"

_>Просьба посоветовать...


затея в том, что mac подделывается, поэтому не является уникальным. потом, емнип, для некоторых протоколов его может просто не быть.
надо искать в принципе другой подход.
так что, вопрос: "Чего же на самом деле надо добиться?"
Re[2]: Как получить мак адрес удаленного компьютера?
От: java_yyyka  
Дата: 22.12.09 11:54
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, java_yyyka, Вы писали:


_>>Как можно определить мак адрес подключенных удаленных машин к серверу средствами java?

_>>Что бы была возможность отслеживать конкретных пользователей не только по айпи. Согласен мак тоже не ахти что, но другого нету.

C0s>как тут уже сказали, более-менее возможно (но, скорее всего, запуском cmd-line утилит, а не удобными java-объектами стандартной библиотеки) только в пределах своей подсети.

C0s>в остальных случаях почти всегда ответ "не выйдет"

_>>Просьба посоветовать...


C0s>затея в том, что mac подделывается, поэтому не является уникальным. потом, емнип, для некоторых протоколов его может просто не быть.

C0s>надо искать в принципе другой подход.
C0s>так что, вопрос: "Чего же на самом деле надо добиться?"


клиент не мы писали и исходников нет, хотя он и написан в достаточно открытой форме, но я в этом не силен.
сторонними скриптами — архи неудобно.
методами явы было бы проше всего, так как сервер написан на ней. — нужно лишь добавить несколько процедур — там уже слжная многопользовательская потоковая система реализована.
при каждом подключении юзера в бд записывается мак и аккаунт тем же REPLACE INTO.
таким образом когда возникнет необходимость, будет не такая уж и маленькая верятность найти аккаунты данного пользователя, сверить другие данные и определить что это именно он и смело банить.
p.s ОС — линукс.



задача: человек коннектится к серверу через клиент, у него есть аккаунты. что бы пресечь его злодеяния — нужно вычислить его аккаунты. так как нарушает правила он с аккаунтов-твинков, а не с оснвных, что бы не попасть в бан. на данный момент возможно только сами понимаете методом запросов с выборкой по айпи, и поиском конкретного значения по базе, например по переданному с одного аккаунта на другой одного и того же id.
Re[2]: Как получить мак адрес удаленного компьютера?
От: java_yyyka  
Дата: 22.12.09 11:59
Оценка:
То есть нужно иметь максимум идентификационных данных.
Учитывая обстоятельства — кроме айпи насклько я понимаю остается только цеплятся за мак. Но и он не определяется. Все гуглы яндексы пересмотрел, ничего на эту тему нет, вот что и удивительно.
пи
Re[3]: Как получить мак адрес удаленного компьютера?
От: Blazkowicz Россия  
Дата: 22.12.09 12:09
Оценка:
Здравствуйте, java_yyyka, Вы писали:

_>То есть нужно иметь максимум идентификационных данных.

_>Учитывая обстоятельства — кроме айпи насклько я понимаю остается только цеплятся за мак. Но и он не определяется. Все гуглы яндексы пересмотрел, ничего на эту тему нет, вот что и удивительно.
Стоило все жа разобраться с тем что такое MAC Address и какова его роль в TCP/IP сетях. Чтобы потом не делать себе невыполнимых ТЗ.
Re[3]: Как получить мак адрес удаленного компьютера?
От: C0s Россия  
Дата: 22.12.09 12:41
Оценка:
Здравствуйте, java_yyyka, Вы писали:

_>То есть нужно иметь максимум идентификационных данных.

_>Учитывая обстоятельства — кроме айпи насклько я понимаю остается только цеплятся за мак. Но и он не определяется. Все гуглы яндексы пересмотрел, ничего на эту тему нет, вот что и удивительно.

на эту тему в гугле полно информации, если не зацикливаться на джаве. но, в сущности, ответ уже дан: мак-адрес можно надёжно подцепить, только если клиент в той же подсети (как уже видно, не ваш случай).
полагаю, стоит рассмотреть вариант склонения к переходу на новую реализацию клиента, написанную вами, там уже можно будет что-то навернуть, хотя особо хитрые нарушители обойдут любой наворот, взломав протокол
Re[3]: Как получить мак адрес удаленного компьютера?
От: GarryIV  
Дата: 22.12.09 13:53
Оценка:
Здравствуйте, java_yyyka, Вы писали:

_>То есть нужно иметь максимум идентификационных данных.

_>Учитывая обстоятельства — кроме айпи насклько я понимаю остается только цеплятся за мак. Но и он не определяется. Все гуглы яндексы пересмотрел, ничего на эту тему нет, вот что и удивительно.

Как нет?
Хотя бы это http://stackoverflow.com/questions/87365/what-identifying-information-can-a-website-capture

* разнообразные куки
* юзер агент
* разрешение экрана
* IP

Все можно фальсифицтровать (как и МАК) но какой-то результат получить можно...
WBR, Igor Evgrafov
Re[3]: Как получить мак адрес удаленного компьютера?
От: PAS_Tor Германия http://passtor.blogspot.com/
Дата: 23.12.09 06:58
Оценка:
Публичные компьютеры идут лесом в случае с MAC'ом?
Под публичными просьба понимать компьютер, на котором работают 2 и более человек.

В Вашем, если есть самописный клиент, случае лучше зашивать логику отсеивания фейков именно в клиент.

Здравствуйте, java_yyyka, Вы писали:

_>То есть нужно иметь максимум идентификационных данных.

_>Учитывая обстоятельства — кроме айпи насклько я понимаю остается только цеплятся за мак. Но и он не определяется. Все гуглы яндексы пересмотрел, ничего на эту тему нет, вот что и удивительно.
Follow my blog @ http://passtor.blogspot.com/
Re[4]: Как получить мак адрес удаленного компьютера?
От: java_yyyka  
Дата: 23.12.09 20:39
Оценка:
Не привычный для меня форум, поэтому отвечаю одним сообщением на все.

1.речь идет не о http сервере.
2.клиент написан на с+ и движке UT, прицепить dllку я и сам могу, а вот написать её гораздо сложнее и что бы уж тогда она пересылала кей в общем протоколе(то есть просто добавить новый тип пакета). Вариант с клиентом к сожалению не подходит в том числе и из за того что я в этом не бум бум . Я бы мог заплатить, но тут очень много тонкостей. Например, если написать хорошую защиту — часть аудитории будет потеряна и соотвественно проект пойдет в миинус.
Если ява функциями по макам определение хоть с 60% вероятности, реализовать невозможно, да и не эффективно — тогда видимо тема неактуальна, вопрос был именно в определении юзера с определенной долей вероятности с серверной части на яве.
А в клиенте разумеется все просто — главное написать новую функцию или изменить существующую не требующуюся: Генерится по железу ключик при каждом коннекте и пересылается на сервер уже в зашифрованном виде с возможностью проверки валидности(хитрую контрольную сумму вставить в ключ), алгоритм обфуксирован, ломать его никто не будет,а если кто и сломает не критично, так как в паблик это не уйдет.


Спасибо всем за ответы! Я считал что мак определять на яве возможно(странно что наоброт, так как функция востребованная).
ё
Re[5]: Как получить мак адрес удаленного компьютера?
От: java_yyyka  
Дата: 23.12.09 20:47
Оценка:
Средств для дополнительного уточнения что это тот самый юзер — предостаточно. В базе и логах очень много записей. Про айпи уже давно знают все юзеры и архиредко удается по айпи отследить.
Суть задачи не в 100% определении, достаточно и небольшого бонуса к возможности определения. Дальше уже подключается куча других зацепок для определения человекоаккаунта. вычислить конечный аккаунт можно бы было в 90% случаев что более чем достаточно и с 95% вероятностью, если бы мак давал хотя бы раз в 10 больший шанс чем динамический айпи, который разумеется всегда меняют.
Re[5]: Как получить мак адрес удаленного компьютера?
От: C0s Россия  
Дата: 24.12.09 00:15
Оценка:
Здравствуйте, java_yyyka, Вы писали:

_>Я считал что мак определять на яве возможно


причём здесь ява? толкуют же тебе, что сетевые протоколы его не дают, т.к. не обязаны
Re[5]: Как получить мак адрес удаленного компьютера?
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 24.12.09 00:56
Оценка: +1
Здравствуйте, java_yyyka, Вы писали:

_>Спасибо всем за ответы! Я считал что мак определять на яве возможно(странно что наоброт, так как функция востребованная).

Вы C++ знаете, как я понял? Предлагаю на $100 поспорить, что вы до 10 января не напишите мне на C++ программу, которая определяет удаленный MAC клиента. То есть вы пишите сервер, я захожу на него через HTTP-протокол или telnet, вы мне выводите мой MAC.
http://jvmmemory.com — простой способ настройки JVM
Re[6]: Как получить мак адрес удаленного компьютера?
От: java_yyyka  
Дата: 28.12.09 11:47
Оценка:
Здравствуйте, LeonidV, Вы писали:

LV>Здравствуйте, java_yyyka, Вы писали:


_>>Спасибо всем за ответы! Я считал что мак определять на яве возможно(странно что наоброт, так как функция востребованная).

LV>Вы C++ знаете, как я понял? Предлагаю на $100 поспорить, что вы до 10 января не напишите мне на C++ программу, которая определяет удаленный MAC клиента. То есть вы пишите сервер, я захожу на него через HTTP-протокол или telnet, вы мне выводите мой MAC.

слабо знаю.
я кажется ясно дал понять что говорил не про сервер а про прицепление дллки и желательно зашифрованной той же темидой в клиентсую часть. вот её уже можно будет обмануть только специалисту а таких нет в той сфере. либо это будет дорого.
Re[7]: Как получить мак адрес удаленного компьютера?
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 28.12.09 23:51
Оценка:
Здравствуйте, java_yyyka, Вы писали:
_>я кажется ясно дал понять что говорил не про сервер а про прицепление дллки и желательно зашифрованной той же темидой в клиентсую часть. вот её уже можно будет обмануть только специалисту а таких нет в той сфере. либо это будет дорого.

Из клиента узнать MAC адрес в Java проще простого. Никаких DLL-ек не нужно.
http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html#getHardwareAddress%28%29


package lv.learn.mac;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

public class Mac {

    public static void main(String[] args) throws Exception {
        Enumeration<NetworkInterface> interfaces = NetworkInterface
                .getNetworkInterfaces();

        while (interfaces.hasMoreElements()) {
            NetworkInterface i = interfaces.nextElement();
            System.out.println("Display name: " + i.getDisplayName());
            System.out.println("Name: " + i.getName());
            Enumeration<InetAddress> inetAddresses = i.getInetAddresses();
            while (inetAddresses.hasMoreElements()) {
                InetAddress addr = inetAddresses.nextElement();
                System.out.println("hostAddress: " + addr.getHostAddress());
            }

            byte[] mac = i.getHardwareAddress();
            // null if localhost
            if (mac != null) {
                for (byte b : mac) {
                    System.out.print(b);
                }
            }
            System.out.println();
        }
    }
}


Вот его вывод:

Display name: vboxnet0
Name: vboxnet0
hostAddress: fe80:0:0:0:800:27ff:fe00:0%4
hostAddress: 192.168.56.1
MAC as bytes: 10039000

Display name: eth1
Name: eth1
hostAddress: fe80:0:0:0:219:5bff:fe72:448b%3
hostAddress: 10.0.0.2
MAC as bytes: 0259111468-117


Display name: lo
Name: lo
hostAddress: 0:0:0:0:0:0:0:1%1
hostAddress: 127.0.0.1
http://jvmmemory.com — простой способ настройки JVM
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.