Lấy địa chỉ IP trong lập trình bằng một số ngôn ngữ thông dụng — Việt Coding | CSharp, Delphi | ASP.NET, PHP, ASP, JSP | WordPress, VBulletin

Lấy địa chỉ IP trong lập trình bằng một số ngôn ngữ thông dụng

by Việt Coding on 06/02/2010

Xin chào các bạn,

Đối với các lập trình viên ít nhất một lần cũng phải có nhu cầu lấy địa chỉ IP (Internet Protocol) cho việc phát triển ứng dụng. Ví dụ để phục vụ cho việc ghi log truy cập, chống đăng nhập nhiều tài khoản cùng một IP, chặn truy cập thông qua IP,… Thông qua những đoạn mã tổng hợp dưới đây, tôi hy vọng nó sẽ hữu ích trong việc tra cứu của các bạn khi cần. Một số ngôn ngữ như là C#, Delphi, VB.NET, VB, C, Java, ASP.NET, PHP, ASP.

Lấy địa chỉ IP

Lấy địa chỉ IP rất có ích trong phát triển ứng dụng (thường là Web)

1. C#

using System;
using System.Net;
 
namespace GetIPCS
{
 ///
 /// Gets IP addresses of the local machine
 ///
 class classGetIPCS
 {
  ///
  /// Gets IP addresses of the local machine
  ///
  [STAThread]
  static void Main(string[] args)
  {
   // Get host name
   String strHostName = Dns.GetHostName();
   Console.WriteLine("Host Name: " + strHostName);
 
   // Find host by name
   IPHostEntry iphostentry = Dns.GetHostByName(strHostName);
 
   // Enumerate IP addresses
   int nIP = 0;
   foreach(IPAddress ipaddress in iphostentry.AddressList)
   {
    Console.WriteLine("IP #" + ++nIP + ": " +
                      ipaddress.ToString());
   }
  }
 }
}

2. Delphi

uses  Winsock;
 
function getIPs: Tstrings;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: array[0..63] of Char;
  I: Integer;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  Result := TstringList.Create;
  Result.Clear;
  GetHostName(Buffer, SizeOf(Buffer));
  phe := GetHostByName(buffer);
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  I    := 0;
  while pPtr^[I] <> nil do
  begin
    Result.Add(inet_ntoa(pptr^[I]^));
    Inc(I);
  end;
  WSACleanup;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetIps.text);
end;

3. VB.NET

Private Sub IPAddress()
'To get local address
	Dim LocalHostName As String
	Dim i As Integer
	LocalHostName = Dns.GetHostName()
	Dim ipEnter As IPHostEntry = Dns.GetHostByName(LocalHostName)
	Dim IpAdd() As IPAddress = ipEnter.AddressList
	For i = 0 To IpAdd.GetUpperBound(0)
	Next
End Sub

4. VB

a75eec42f14a0fff052bbc502ec06907012

5. C

// Borland C++ 5.0: bcc32.cpp getlocalip.cpp
// Visual C++ 5.0: cl getlocalip.cpp wsock32.lib
//
// This sample program is hereby placed in the public domain.
 
#include
#include 
 
int doit(int, char **)
{
    char ac[80];
    if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
        cerr < < "Error " << WSAGetLastError() <<
                " when getting local host name." << endl;
        return 1;
    }
    cout << "Host name is " << ac << "." << endl;
 
    struct hostent *phe = gethostbyname(ac);
    if (phe == 0) {
        cerr << "Yow! Bad host lookup." << endl;         return 1;     }     for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
        struct in_addr addr;
        memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
        cout < < "Address " << i << ": " << inet_ntoa(addr) << endl;
    }
 
    return 0;
}
 
int main(int argc, char *argv[])
{
    WSAData wsaData;
    if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
        return 255;
    }
 
    int retval = doit(argc, argv);
 
    WSACleanup();
 
    return retval;
}
}

6. Java

import java.net.*;
import java.io.*;
 
public class GetIPAddress
{
	public static void main(String [] args)
	{
		try
		{
			InetAddress thisIp =InetAddress.getLocalHost();
			System.out.println("IP:"+thisIp.getHostAddress());
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

7. ASP.NET

string ip;
ip=Request.ServerVariables("HTTP_X_FORWARDED_FOR");
if(ip==string.Empty)
{
ip=Request.ServerVariables("REMOTE_ADDR");
}

8. PHP

$ip=$_SERVER['REMOTE_ADDR'];

9. ASP

&lt;% Response.Write Request.ServerVariables("REMOTE_ADDR") %&gt;

Thật đơn giản để sử dụng đúng không nào :) Chúc vui !

(Copyright © 2010 by Hoàng  Tuấn  Anh -Shinichi @ Shinichi Blog – http://vietcoding.com)

{ 15 comments… read them below or add one }

phuong March 27, 2010 at 11:18 AM

Bạn ơi sao lấy ip theo ngôn ngữ VB.NET không chạy được
Dim ipEnter As IPHostEntry = Dns.GetHostByName(LocalHostName)
Dim IpAdd() As IPAddress = ipEnter.AddressList
IPHostEnty và IPAddress nó không có trong danh sách các thuộc tính nên nó cứ báo lõi hoài à.có gì bạn giúp mình với nha!
thank you nhiều

Reply

Việt Coding March 27, 2010 at 5:29 PM

Bạn đã thử thêm namespace System.Net chưa ?

Reply

phuong March 28, 2010 at 9:06 PM

mình thêm rồi mà.Nguyên đoạn code mình viết đó mà nó không xuất ra địa chỉ IP còn username thì được rồi.Bạn xem giúp mình nha! Cẳmn bạn nhiều.

Imports System.Net.Dns
Imports System.Net.IPHostEntry
Imports System.Net.IPAddress

Public Class frm_intt

Private Sub frm_intt_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim HostName As String = System.Net.Dns.GetHostName()
txt_1.Text = HostName
Dim i As Integer
Dim IPEnter As System.Net.IPHostEntry = System.Net.Dns.GetHostByName(HostName)
Dim IpAddress() As System.Net.IPAddress = IPEnter.AddressList
For i = 0 To IpAddress.GetUpperBound(0)
txt_2.Text = IpAddress.GetUpperBound(0)
Next
End Sub
End Class

Reply

Việt Coding March 31, 2010 at 1:10 PM

Hi,

Tôi hiện tại đang nghỉ phép về Bắc thăm ông bà. Truy cập qua điện thoại nên có chút bất tiện, sau khi về, tôi sẽ xem kỹ ví dụ của bạn rồi trả lời nhé !

Thân,

Reply

phuong April 1, 2010 at 3:35 PM

đoạn code trên mình sửa lại chạy được rồi bạn.cảm ơn bạn nhiều nha!

Reply

phuong April 1, 2010 at 3:39 PM

mình đang làm bài báo cáo mà gặp rắc rối bạn giúp mình với nhé !
bạn có code lấy địa chỉ ip của bất kì trang web nào bằng ngôn ngữ vb.net
không? có thì cho mình xin nha!

Reply

Việt Coding April 1, 2010 at 5:25 PM

Hì hì,

Chúc mừng bạn :D Vấn đề nằm ở đâu vậy bạn ? Chia sẻ cho mọi người cùng biết nào ;)
.-= Việt Coding´s last blog ..5 ví dụ về Rewrite URL dùng htaccess thông dụng =-.

Reply

phuong April 5, 2010 at 8:52 AM
string HostName = GetHostName()
        For int i = 0 To GetHostByName(HostName).AddressList.Length - 1
            string a = GetHostByName(HostName).AddressList(i).ToString()
            ListBox1.Items.Add(a)
        Next
        ListBox1.SelectedIndex = 0
        txt_3.Text = HostName

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        txt_2.Text = ListBox1.SelectedItem
    End Sub

Đoạn code cua minh đó,đoạn code này lấy được địa chỉ ip của web luôn đó

Reply

huong April 14, 2010 at 4:37 PM

Mình muốn lấy địa chỉ ip của các client khi client truy cập đến server của mình bẳng ngôn ngữ jsp! Ban giúp minh nhé

Reply

Việt Coding April 15, 2010 at 9:48 PM

Bạn thử đoạn code này xem sao:


< %
out.print( request.getRemoteAddr() );
out.print( request.getRemoteHost() );
%>

//or...
< %
out.print( request.getHeader("x-forwarded-for") );
%>

P/s: Tôi không dùng JSP nên cũng không dám chắc lắm :)

Reply

huong April 19, 2010 at 8:22 AM

thanks ban nhieu nha

Reply

van April 25, 2010 at 11:18 PM

Chào bạn cho mình hỏi bạn có biết cách tạo ra một web chat không vậy, chỉ giúp mình với. Chat text và chat voice qua web

Reply

Việt Coding April 26, 2010 at 3:34 PM

Tôi chưa tạo webchat bao giờ nên không thể trả lời bạn được. Thay vào đấy bạn search thử tên Google, theo tôi biết có nhiều mã nguồn để làm việc đó :)

Reply

van May 8, 2010 at 9:16 PM

Cho mình hỏi vấn đề này chút ngen mình đang làm đề tài chat video giống như yahoo. Mình làm demo bằng VC++ (dùng thư viện lập trình MFC) của bộ DOTNET, khi muốn kết nối đến một máy tính nào đó mình phải hỏi địa chỉ IP của máy đó sau đó mới gõ địa chỉ IP vào một dialog để kết nối đến máy kia, như vậy là rất bất tiện nên mình muốn hỏi bạn làm thế nào để lấy địa chỉ IP của tất cả các client kết nối đến và hiển thị trong một listbox, khi muốn kết nối với client nào thì ta chỉ việc nhìn vào listbox đó và gõ địa chỉ kết nối

Reply

Việt Coding May 9, 2010 at 5:05 PM

Bạn dùng ngôn ngữ C++ ? Nếu vậy thì tôi không giúp được bạn vì tôi không dùng C. Bạn thử tìm kiếm trên Google xem sao.

Reply

Leave a Comment

CommentLuv Enabled
CO.CC:Free Domain
 
Powered
 

Previous post:

Next post: