Во-первых, IP-адрес, который видит ваш сервер, часто не является фактическим IP-адресом компьютера, на котором находится пользователь, поскольку между ними часто находится устройство NAT или прокси-сервер, который сопоставляет IP-адрес частной сети компьютера пользователя с общедоступный IP-адрес для использования в Интернете. Это будет верно, если вы используете компьютер в своей домашней сети, используете компьютер на работе, подключаетесь через Wi-Fi в Starbucks и т. Д.
User Computer (private IP 192.168.1.x) => Gateway (some public IP address) => Your server
Если один и тот же компьютер подключен к вашему серверу снова и снова одним и тем же способом, ему «может» назначаться один и тот же публичный IP-адрес каждый раз, когда он это делает. Но при других обстоятельствах это не может быть.
Если один и тот же компьютер является мобильным (телефон, ноутбук, планшет) и подключается к Интернету по-разному (WiFi, сотовый), то он может отображаться как другой IP-адрес каждый раз, когда он подключается из другого места.
Таким образом, в наши дни множество мобильных устройств и пользователей, которые могут даже получить доступ к услуге с более чем одного устройства, IP-адрес просто НЕ является хорошей мерой того, является ли это риском или нет.
Кроме того, в случае использования общего NAT, такого как «горячая точка доступа Wi-Fi» или подключение из корпоративной сети, многие пользователи могут показаться с одного и того же публичного IP-адреса.
Я бы не советовал использовать IP-адрес в качестве индикатора безопасности. Вы просто получите много ложных индикаторов неверного IP-адреса, который изменился с момента последнего доступа, и вы даже можете получить ложные срабатывания, когда другой пользователь появляется на том же IP-адресе, что и законный пользователь. В наши дни NAT и мобильности не существует однозначного соответствия между публичным IP-адресом и пользователем. Попытка притвориться, что есть, вызовет всевозможные проблемы.
Форма. Свойство SpatialRelation скажет Вам, если две формы затронут. Форма. Индексное свойство скажет Вам, который является впереди или позади в z-порядке.
Вот простой пример:
Public Sub DoShapesIntersect(ByRef shape1 As Visio.Shape, ByRef shape2 As Visio.Shape)
'// do they touch?
If (shape1.SpatialRelation(shape2, 0, 0) <> 0) Then
'// they touch, which one is in front?
If (shape1.Index > shape2.Index) Then
Debug.Print shape1.Name + " is in front of " + shape2.Name
Else
Debug.Print shape1.Name + " is behind " + shape2.Name
End If
Else
Debug.Print "shape1 and shape2 do not touch"
End If
End Sub
Читайте больше здесь: