81 messaggi dal 30 giugno 2013
www.topgan.it
ciao eccomi di nuovo dopo diversi tentativi sono giunto a questa ma non so se è giusta:
Ho creato un file dal nome clientIPAddress nella cartella App_Code con il codice:
using System;
using System.Collections.Generic;
using System.Web;

/// <summary>
/// memorizza IndirizzoIP
/// </summary>
public static class Extensions
{
    public static long GetClientIPAddress(this HttpContext context)
    {
        return context.Request.UserHostAddress.GetIPAddressValue();
    }

    public static long GetIPAddressValue(this string clientIPAddress)
    {
        long value = 0L;

        if (clientIPAddress == null)
        {
            throw new ArgumentNullException("clientIPAddress");
        }

        // Risolvi l'indirizzo IP del client
        IPAddress address = Dns.GetHostAddresses(clientIPAddress)
            .FirstOrDefault(
                x => x.AddressFamily.Equals(AddressFamily.InterNetwork));

        // Genera il valore numerico (intero a 64 bit)
        if (address != null)
        {
            try
            {
                string[] octets = address.ToString().Split(new char[] { '.' });

                value = Math.Abs(
                    (Int64.Parse(octets[3])) +
                    (Int64.Parse(octets[2]) * 256L) +
                    (Int64.Parse(octets[1]) * 256L * 256L) +
                    (Int64.Parse(octets[0]) * 256L * 256L * 256L));
            }
            catch (Exception)
            {
                // Ritorna il valore di default
                value = 0L;
            }
        }

        return value;
    }
}

Poi nella pagina di registrazione cshtml ho inserito questo long indirizzoIP = this.Context.GetClientIPAddress();
esempio:
@{
  // Inizializzare le variabili di pagina generali
    var email = "";
    var password = "";
    var confirmPassword = ""; 
    var displayname = "";
    var indirizzoIP = "";
    var urlfoto ="/Avatar/Nullo.jpg";

if (IsPost) {
 long indirizzoIP = this.Context.GetClientIPAddress();   
     
        db.Execute("INSERT INTO UserProfiles (Email,UrlFoto,DisplayName,IP) VALUES (@0,@1,@2,@3)", email,urlfoto,displayname,indirizzoIP);
        
             }

}


ora mi serve sapere se è giusto cosi e se non lo è per cortesia mi dite come devo fare?

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
81 messaggi dal 30 giugno 2013
www.topgan.it
Non funziona mi da questo Errore:

Errore server nell'applicazione '/'.

Errore di compilazione

Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.

Messaggio di errore del compilatore: CS0246: Impossibile trovare il tipo o il nome dello spazio dei nomi 'IPAddress'; probabilmente manca una direttiva using o un riferimento a un assembly

Errore nel codice sorgente:


Riga 23:
Riga 24: // Risolvi l'indirizzo IP del client
Riga 25: IPAddress address = Dns.GetHostAddresses(clientIPAddress)
Riga 26: .FirstOrDefault(
Riga 27: x => x.AddressFamily.Equals(AddressFamily.InterNetwork));

File di origine: g:\Siti Web\******\App_Code\clientIPAddress.cs Riga: 25


Mostra dettagli dell'output del compilatore:

Mostra origine di compilazione completa:


Informazioni di versione: Versione di Microsoft .NET Framework:4.0.30319; Versione di ASP.NET:4.0.30319.18446

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
81 messaggi dal 30 giugno 2013
www.topgan.it
Ciao ne sarei davvero grado anche se qualcuno sa indicarmi un altro modo per prelevare IP di che si sta registrando al sito e salvarlo nel database.
Grazie davvero

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
81 messaggi dal 30 giugno 2013
www.topgan.it
ciao il problema persiste perché lo script di Riccardo non mi funziona continua a darmi l'errore.
Io ho trovato questa soluzione ma mi fa visualizzare l'IP e non posso salvarlo e poi sono costretto a usare un javascript e una pagina php che non vorrei usa.
Vorrei fare tutto con cshtml.
Vi metto i codice sia dello javascript:
@{
   
}

<!DOCTYPE html>

<html lang="it">
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script type="text/javascript">
// chiamata di xmlHttp
// controllo per Internet Explorer
var xmlHttp = false;
try
{
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
  try
  {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }catch(e){
    xmlHttp = false;
  }
}
//browser diversi da Internet Explorer
if (!xmlHttp && typeof XMLHttpRequest != 'undefined')
{
  xmlHttp = new XMLHttpRequest();
}

//definiamo la funzione per mostrare l'Ip
function ipshow()
{
  if (xmlHttp)
  {
    // apriamo la richiesta HTTP specificando il metodo 
    // da utilizzare e l'indirizzo del file remoto
    xmlHttp.open('GET', 'ip.php'); 
    xmlHttp.onreadystatechange = function (){
      //ready.state restituisce lo stato della richiesta
      if (xmlHttp.readyState == 4)
      {
        document.getElementById("userip").innerHTML = xmlHttp.responseText;
        // restituice il corpo della risposta come stringa
        document.test.mostraip.value = xmlHttp.responseText;
      }
    };
    xmlHttp.send(null);
  }
}
//chiamata alla funzione
function showip()
{
  alert(document.test.mostraip.value)
}
</script>

    </head>
    <body onload="ipshow();">
     <div id="userip"></div> 
       
    </body>
</html>

Che della pagina php:
<?php
@header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
@header('Last-Modified: '.@gmdate('D, d M Y H:i:s').' GMT');
@header('Cache-Control: no-store, no-cache, must-revalidate');
@header('Cache-Control: post-check=0, pre-check=0', false);
@header('Pragma: no-cache');
if(isset($_SERVER['REMOTE_ADDR']))
{
  $indirizzo_ip = $_SERVER['REMOTE_ADDR'];
  echo 'Il tuo IP è: ' . $indirizzo_ip;
}
?>

Se volete questo funziona benissimo per vedere L'IP ma non per memorizarlo.
Grazie in anticipo

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
ascolta: mantieni la calma. Copiare script da internet non ti aiuterà in alcun modo se non ne comprendi appieno il funzionamento. Se si verificano errori, vanno presi di petto e risolti in maniera metodica.

Abbandona quest'ultima soluzione che usa la pagina PHP e torna invece ad usare lo script di Riccardo. Dobbiamo giusto affrontare questo problema, che è facile da risolvere:

Messaggio di errore del compilatore: CS0246: Impossibile trovare il tipo o il nome dello spazio dei nomi 'IPAddress'; probabilmente manca una direttiva using o un riferimento a un assembly

Come forse sai, le tante classi del .NET framework sono organizzate in contenitori logici chiamati namespaces. Il compilatore ti sta appunto segnalando che non ha idea in quale di questi contenitori si trovi la classe chiamata "IPAddress". Ti sta anche suggerendo di aggiungere una direttiva using, che è il sistema usato per dare quest'informazione al compilatore.

Dunque, in cima al tuo file clientIPAddress.cs metti questa riga:
using System.Net;

Ora prova a ricompilare l'applicazione. Se si verificano altri errori simili, dovrai aggiungere altre direttive using.
Come ho fatto a sapere che la classe IPAddress è situata nel namespace System.Net? L'ho trovato nella documentazione, dove infatti trovi scritto il nome del namespace.
http://msdn.microsoft.com/it-it/library/system.net.ipaddress(v=vs.110).aspx

Aggiungere le direttive using è ancora più facile se ti lasci guidare da Visual Studio. Se premi CTRL+. (ctrl e punto contemporaneamente) mentre il cursore si trova sul nome della classe, Visual Studio ti offrirà l'opportunità di aggiungere la direttiva using mancante.

A proposito: la tua è un'applicazione ASP.NET MVC o WebPages? Cioè, stai usando Visual Studio o WebMatrix?

ciao,
Moreno
Modificato da BrightSoul il 22 luglio 2014 21.41 -

Enjoy learning and just keep making
81 messaggi dal 30 giugno 2013
www.topgan.it
Ciao e ti devo davvero ringraziare di cuore.
Ho aggiunto using System.Net; ma non funziona ancore mi da questi errori:
Errore1'System.Array' non contiene una definizione di 'FirstOrDefault' e non è stato trovato alcun metodo di estensione 'FirstOrDefault' che accetta un primo argomento di tipo 'System.Array'. Probabilmente manca una direttiva using o un riferimento a un assembly.G:\Siti Web\******\App_Code\clientIPAddress.cs27

Errore2Il nome 'AddressFamily' non esiste nel contesto corrente.G:\Siti Web\******\App_Code\clientIPAddress.cs28
allora o provato ad aggiungere la using System.Array ma non funziona ancora dandomi questo:
Errore1Una direttiva using dello spazio dei nomi può essere applicata solo a spazi dei nomi. 'System.Array' è un tipo, non uno spazio dei nomi.G:\Siti Web\******\App_Code\clientIPAddress.cs5
Approposito io sto usando WebMatrix
Comunque davvero mille grazie per cercare di aiutarmi

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
81 messaggi dal 30 giugno 2013
www.topgan.it
Ciao eccomi qua di nuovo dopo tantissimi tentativi sono riuscito a non farmi dare nessun errore nel file clientIPAddress.cs eccovi il codice:
using System;
using System.Collections.Generic;
using System.Web;
using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;
using System.Linq;

/// <summary>
/// memorizza IndirizzoIP
/// </summary>
public static class Extensions
{
    public static long GetClientIPAddress(this HttpContext context)
    {
        return context.Request.UserHostAddress.GetIPAddressValue();
    }

    public static long GetIPAddressValue(this string clientIPAddress)
    {
        long value = 0L;

        if (clientIPAddress == null)
        {
            throw new ArgumentNullException("clientIPAddress");
        }

        // Risolvi l'indirizzo IP del client
        IPAddress address = Dns.GetHostAddresses(clientIPAddress)
            .FirstOrDefault(
                x => x.AddressFamily.Equals(AddressFamily.InterNetwork));

        // Genera il valore numerico (intero a 64 bit)
        if (address != null)
        {
            try
            {
                string[] octets = address.ToString().Split(new char[] { '.' });

                value = Math.Abs(
                    (Int64.Parse(octets[3])) +
                    (Int64.Parse(octets[2]) * 256L) +
                    (Int64.Parse(octets[1]) * 256L * 256L) +
                    (Int64.Parse(octets[0]) * 256L * 256L * 256L));
            }
            catch (Exception)
            {
                // Ritorna il valore di default
                value = 0L;
            }
        }

        return value;
    }
}


Ma adesso il problema e nella pagina di registrazione cshtml che mi da questo errore:
Errore di compilazione

Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.

Messaggio di errore del compilatore: CS1928: 'System.Web.HttpContextBase' non contiene una definizione per 'GetClientIPAddress' e l'overload migliore del metodo di estensione 'Extensions.GetClientIPAddress(System.Web.HttpContext)' presenta alcuni argomenti non validi

Errore nel codice sorgente:


Riga 8: var urlfoto ="/Avatar/Nullo.jpg";
Riga 9: // Versione 1 - Proprietà Context della classe Page
Riga 10: long address1 = this.Context.GetClientIPAddress();
Riga 11:
Riga 12: // Versione 2 - Istanza corrente del contesto HTTP

File di origine: g:\Siti Web\*****\Account\Page.cshtml Riga: 10


Mostra dettagli dell'output del compilatore:

Mostra origine di compilazione completa:


Informazioni di versione: Versione di Microsoft .NET Framework:4.0.30319; Versione di ASP.NET:4.0.30319.18446

vi metto anche il codice della pagina:
@{
  // Inizializzare le variabili di pagina generali
    var email = "";
    var password = "";
    var confirmPassword = ""; 
    var displayname = "";
    var urlfoto ="/Avatar/Nullo.jpg";
// Versione 1 - Proprietà Context della classe Page
long address1 = this.Context.GetClientIPAddress();

// Versione 2 - Istanza corrente del contesto HTTP
long address2 = HttpContext.Current.GetClientIPAddress(); 
if (IsPost) {
    
     
        db.Execute("INSERT INTO UserProfiles (Email,UrlFoto,DisplayName,IP) VALUES (@0,@1,@2,@3)", email,urlfoto,displayname,address1);
        
             }

}

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
 @address1<br>
 @address2      
    </body>
</html>

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
81 messaggi dal 30 giugno 2013
www.topgan.it
ciao e mi dovete scusare ma man mano che ho dei progressi vi metto a conoscenza cosi che passo passo possiate capire quello che succede.
Ora sono giunto a una soluzione che sembra funzionare.
Nella pagina cshtml anziché usare il metodo 1 ho usato il metodo 2 finalmente non mi da errore restituendomi un numero di 10 cifre tutte di continuo es: 1602458675 che questo viene salvato nel database, ma ora come si fa a capire ip che invece dovrebbe essere suddiviso?
Codice della pagina cshtml:
@{
  // Inizializzare le variabili di pagina generali
    var email = "";
    var password = "";
    var confirmPassword = ""; 
    var displayname = "";
    var urlfoto ="/Avatar/Nullo.jpg";
// Versione 1 - Proprietà Context della classe Page
//long address1 = this.Context.GetClientIPAddress();

// Versione 2 - Istanza corrente del contesto HTTP
long indirizzoIP = HttpContext.Current.GetClientIPAddress();

}

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
 
 @indirizzoIP      
    </body>
</html>

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.