Ajax+Servletで、アクセスしてきた奴らのIPアドレスを取得する方法。
備忘録
Ajax(prototype.js)と、JavaServletを利用して、アクセスユーザーのグローバルIPアドレスを取得して、データベース(MySQL)に貯めておく方法。
前準備
サーバー機:MacBook
クライアント端末:iPhone 3G
プロジェクト名:gipaddr
参照ライブラリ:servlet-api.jar(./WEB-INF/lib)
参照ライブラリ:mysql-connector-java-bin.jar(./WEB-INF/lib)
参照ライブラリ:prototype.js(./WEB-INF)
Servletクラス:gipaddr.class
htmlファイル:index.html
MySQLデータベース作成
$ mysql u- root p
Password:
mysql>create database dbgipaddr;
Query OK, 1 row affected (0.00 sec)
mysql>create table dbgipaddr.tblgipaddr(
-> seq int auto_increment not null primary key,
-> gipaddr char(15) not null,
-> username varchar(256) not null,
-> timestamp timestamp not null
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbgipaddr.tblgipaddr(gipaddr, username) values('000.000.000.000','user');
Query OK, 1 row affected (0.00 sec)
mysql> select * from dbgipaddr.tblgipaddr;
+-----+-----------------+--------------+---------------------+
| seq | gipaddr | username | timestamp |
+-----+-----------------+--------------+---------------------+
| 1 | 000.000.000.000 | user | 2008-11-23 19:07:51 |
+-----+-----------------+--------------+---------------------+
1 row in set (0.00 sec)
Ajaxページ作成 index.html
<html>
<head>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript"></script>
<title></title>
</head>
<body>
</body>
</html>
サーブレット側作成 gipaddr.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class gipaddr extends HttpServlet {
public gipaddr() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
if (!request.getLocalAddr().equals(request.getRemoteAddr())){
Connection con = null;
PreparedStatement stmt = null;
String sql = "insert into dbgipaddr.tblgipaddr(gipaddr, username) values('"+request.getRemoteAddr()+"','"+request.getRemoteUser()+"')";
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/","root","");
stmt = con.prepareStatement(sql);
stmt.executeUpdate();
out.println("こんにちわ");
}catch(Exception e){
out.println(e);
}finally{
if(con!=null){
try{
con.close();
}catch(Exception e){
out.println(e);
}
}
}
}else{
out.println("サーバー機です。");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doPost(request, response);
}
クライアント端末(iPhone 3G)で、サーバー端末(MacBook)にアクセスしたとき。
mysql> select * from dbgipaddr.tblgipaddr;
+-----+-----------------+--------------+---------------------+
| seq | gipaddr | username | timestamp |
+-----+-----------------+--------------+---------------------+
| 1 | 000.000.000.000 | user | 2008-11-23 19:07:51 |
| 2 | 192.168.11.3 | null | 2008-11-23 19:38:01 |
+-----+-----------------+--------------+---------------------+
2 rows in set (0.00 sec)
Lan内だから、ローカルIP取得になったけど、Webサーバ公開した時、たぶんグローバルIP取得出来るとおもう。
備忘録
Ajax(prototype.js)と、JavaServletを利用して、アクセスユーザーのグローバルIPアドレスを取得して、データベース(MySQL)に貯めておく方法。
前準備
サーバー機:MacBook
クライアント端末:iPhone 3G
プロジェクト名:gipaddr
参照ライブラリ:servlet-api.jar(./WEB-INF/lib)
参照ライブラリ:mysql-connector-java-bin.jar(./WEB-INF/lib)
参照ライブラリ:prototype.js(./WEB-INF)
Servletクラス:gipaddr.class
htmlファイル:index.html
MySQLデータベース作成
$ mysql u- root p
Password:
mysql>create database dbgipaddr;
Query OK, 1 row affected (0.00 sec)
mysql>create table dbgipaddr.tblgipaddr(
-> seq int auto_increment not null primary key,
-> gipaddr char(15) not null,
-> username varchar(256) not null,
-> timestamp timestamp not null
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbgipaddr.tblgipaddr(gipaddr, username) values('000.000.000.000','user');
Query OK, 1 row affected (0.00 sec)
mysql> select * from dbgipaddr.tblgipaddr;
+-----+-----------------+--------------+---------------------+
| seq | gipaddr | username | timestamp |
+-----+-----------------+--------------+---------------------+
| 1 | 000.000.000.000 | user | 2008-11-23 19:07:51 |
+-----+-----------------+--------------+---------------------+
1 row in set (0.00 sec)
Ajaxページ作成 index.html
<html>
<head>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript"></script>
<title></title>
</head>
<body>
</body>
</html>
サーブレット側作成 gipaddr.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class gipaddr extends HttpServlet {
public gipaddr() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
if (!request.getLocalAddr().equals(request.getRemoteAddr())){
Connection con = null;
PreparedStatement stmt = null;
String sql = "insert into dbgipaddr.tblgipaddr(gipaddr, username) values('"+request.getRemoteAddr()+"','"+request.getRemoteUser()+"')";
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/","root","");
stmt = con.prepareStatement(sql);
stmt.executeUpdate();
out.println("こんにちわ");
}catch(Exception e){
out.println(e);
}finally{
if(con!=null){
try{
con.close();
}catch(Exception e){
out.println(e);
}
}
}
}else{
out.println("サーバー機です。");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doPost(request, response);
}
クライアント端末(iPhone 3G)で、サーバー端末(MacBook)にアクセスしたとき。
mysql> select * from dbgipaddr.tblgipaddr;
+-----+-----------------+--------------+---------------------+
| seq | gipaddr | username | timestamp |
+-----+-----------------+--------------+---------------------+
| 1 | 000.000.000.000 | user | 2008-11-23 19:07:51 |
| 2 | 192.168.11.3 | null | 2008-11-23 19:38:01 |
+-----+-----------------+--------------+---------------------+
2 rows in set (0.00 sec)
Lan内だから、ローカルIP取得になったけど、Webサーバ公開した時、たぶんグローバルIP取得出来るとおもう。