créer une petite application client/serveur en java qui permet de filtrer les adresses IP,et faire des stats dessus et surveiller le trafic entre le client et le serveur.
Source / Exemple :
1er classe Serveur:(1/3)
import java.net.*;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import com.sun.media.sound.Toolkit;
public class ThreadClient extends JFrame implements Runnable{
private Thread _t; // contiendra le thread du client
public Socket _socket; // recevra le socket liant au client
private PrintWriter _out; // pour gestion du flux de sortie
private BufferedReader _in; // pour gestion du flux d'entrée
private Serveur _Serveur; // pour utilisation des méthodes de la classe principale
private int _numClient=0; // contiendra le numéro de client géré par ce thread
boolean flag=false;
ThreadClient(Serveur s,Socket ss){
this._Serveur=s;
this._socket=ss;
try {
_out = new PrintWriter(new BufferedOutputStream(_socket.getOutputStream()));
_in = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
System.out.print("nouvelle connexion avec --> "+_socket.getInetAddress()+" -- ");
_numClient = _Serveur.addClient(_out);
}
catch(IOException e){
e.setStackTrace(null);
}
_t=new Thread(this);
_t.start();
}
public void run() {
String message = "";
System.out.println("no "+(_numClient+1));
try{
_out.println("HTTP/1.1 200 OK");
_out.println("Server: myServer/4.7");
_out.println("Date: 12/02/1986");
_out.println("Content-type: text/html");
_out.println("");
_out.println("vous etes : "+(_numClient+1)+" Connectes sur le serveur");
_out.println("<html><div style=\"background-color:red;text-align:center;\"><a href=\"programe.java\">hello everybody</a></div></html>");
//On recupere les information du client
String line=_in.readLine();
int i1=line.indexOf(" ");//renvoi lindice de la prmeir position
int i2=line.lastIndexOf(" ");
String mes=line.substring(i1+2,i2);
System.out.println("Le client numero :"+(_numClient+1)+" a demander :"+mes);
_out.println("\n");
_out.println("vous demandez : "+mes);
_out.flush();
// _out.close();
}
catch(Exception e){
e.setStackTrace(null);
}
// _out.close();
/* try{
String line=_in.readLine();
int i1=line.indexOf(" ");//renvoi lindice de la prmeir position
int i2=line.lastIndexOf(" ");
String mes=line.substring(i1+2,i2);
System.out.println(mes);
int nn=0;
while(nn<50){
sendMsg(mes);
nn++;
}
/*while(flag==false){//tant que ya des ligne je lis
if(mes.equals("\n")) {
flag=true;
break;//pour detecter la fin des lignes
}
if(mes.equals("\r")) {
flag=true;
break;//ya des brother qui utilise plin de truk pr fin de fichier
}
if(mes.equals("\r\n")){
flag=true;
break;
}
if(mes.equals("")){
flag=true;
break;
}
/*BufferedReader theFile=new BufferedReader(new InputStreamReader(new FileInputStream("g.html")));//pour ouvrir le fichier html et le parcourir en entier
String ll;
ll=theFile.readLine();
System.out.println("je lis le fichier "+ll);
_out.println("<html><div style=\"background-color:red;text-align:center;\">hello everybody</html>");
_out.flush();
while(ll!=null){
_out.println(ll);
ll=theFile.readLine();
}
flag=true;
}
// _out.println("<html><div style=\"background-color:red;text-align:center;\">vous etes :"+_numClient+"</html>");
//_out.flush();
}
catch(Exception e){
}
}
public void sendMsg (String sMsg){
_out.write(sMsg);
_out.flush();
}
}
/*
class Dial extends JFrame implements ActionListener,Runnable{
private JButton okBouton;
private JTextField login;
private JPasswordField pass;
private JLabel log,passs;
private boolean ok;
private Serveur _serv;
private Socket _socket;
private Thread _t;
Dial(){
setTitle("Proxy de mohamed");
setSize(330,200);
Container contenu=getContentPane();
contenu.setLayout(null);
log=new JLabel("Login");log.setBounds(20, 50, 50, 20);contenu.add(log);
JTextField login=new JTextField();login.setBounds(100,50 , 150, 20);contenu.add(login);
okBouton=new JButton("Connexion");
okBouton.setBounds(100,120,100, 20);
contenu.add(okBouton);
okBouton.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
try{
if(e.getSource()==okBouton){
String name=login.getText();
//Dial.setVisible(false);
}
}
catch(Exception ee){
ee.setStackTrace(null);
}
}
public void run() {
System.out.println("ddd");
new ThreadClient(_serv,_socket);
}
}
2eme classe Proxy(2/3)
import java.net.*;
import java.util.LinkedList;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/*------------------------Je lance un proxy pour chaque nouveau connecté------------------------------------------------*/
/*------------------------------------------------------------------------------------*/
public class Proxy implements Runnable{
private Serveur _serv;
private Socket _socket;
private Thread _t;
private PrintWriter _out; // pour gestion du flux de sortie
private BufferedReader _in;
private String[] IP;//pou recuper les IP permis
/*dans adresseInterdite je met l'adresse IP des gens que je veux pas qu il accede sur mon serveur-------*/
//private String adresseInterdite="/127.0.0.1";
/*-------------------------Constructeur qui pren le serveur et le socket du client-------------------------------------*/
Proxy(Serveur s,Socket ss,String[] ip){
this._serv=s;
this._socket=ss;
this.IP=ip;
try{
_out = new PrintWriter(new BufferedOutputStream(_socket.getOutputStream()));
_in = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
System.out.println("on est ds le proxy");
}
catch(Exception e){
}
/*-----------------------------pour chaque client je lance un thread client apres filtrage-------------------------------------*/
_t=new Thread(this);
_t.start();
}
/*--------------------------------Lancement du tread pour chaque client------------------------------------*/
public void run() {
/*IpClient est l adresse IP du client qui s est connecté*/
InetAddress IpClient= _socket.getInetAddress();
/*Je transforme cette adress ip en string pour la comparer avec les IP Interdit*/
String IpClientS=IpClient.toString();
System.out.println("IP du client ---> : "+IpClientS);
for(int i=0;i<IP.length;i++){
if (IP[i].equalsIgnoreCase(IpClientS)){
//si je rentre C.A.D mon ip a le droit d y acceder
System.out.println("Acces autorisé");
new ThreadClient(_serv,_socket);
break;
}
}
}
}
3eme classe Client(3/3)
import java.net.*;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import com.sun.media.sound.Toolkit;
public class ThreadClient extends JFrame implements Runnable{
private Thread _t; // contiendra le thread du client
public Socket _socket; // recevra le socket liant au client
private PrintWriter _out; // pour gestion du flux de sortie
private BufferedReader _in; // pour gestion du flux d'entrée
private Serveur _Serveur; // pour utilisation des méthodes de la classe principale
private int _numClient=0; // contiendra le numéro de client géré par ce thread
boolean flag=false;
ThreadClient(Serveur s,Socket ss){
this._Serveur=s;
this._socket=ss;
try {
_out = new PrintWriter(new BufferedOutputStream(_socket.getOutputStream()));
_in = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
System.out.print("nouvelle connexion avec --> "+_socket.getInetAddress()+" -- ");
_numClient = _Serveur.addClient(_out);
}
catch(IOException e){
e.setStackTrace(null);
}
_t=new Thread(this);
_t.start();
}
public void run() {
String message = "";
System.out.println("no "+(_numClient+1));
try{
_out.println("HTTP/1.1 200 OK");
_out.println("Server: myServer/4.7");
_out.println("Date: 12/02/1986");
_out.println("Content-type: text/html");
_out.println("");
_out.println("vous etes : "+(_numClient+1)+" Connectes sur le serveur");
_out.println("<html><div style=\"background-color:red;text-align:center;\"><a href=\"programe.java\">hello everybody</a></div></html>");
//On recupere les information du client
String line=_in.readLine();
int i1=line.indexOf(" ");//renvoi lindice de la prmeir position
int i2=line.lastIndexOf(" ");
String mes=line.substring(i1+2,i2);
System.out.println("Le client numero :"+(_numClient+1)+" a demander :"+mes);
_out.println("\n");
_out.println("vous demandez : "+mes);
_out.flush();
// _out.close();
}
catch(Exception e){
e.setStackTrace(null);
}
// _out.close();
/* try{
String line=_in.readLine();
int i1=line.indexOf(" ");//renvoi lindice de la prmeir position
int i2=line.lastIndexOf(" ");
String mes=line.substring(i1+2,i2);
System.out.println(mes);
int nn=0;
while(nn<50){
sendMsg(mes);
nn++;
}
/*while(flag==false){//tant que ya des ligne je lis
if(mes.equals("\n")) {
flag=true;
break;//pour detecter la fin des lignes
}
if(mes.equals("\r")) {
flag=true;
break;//ya des brother qui utilise plin de truk pr fin de fichier
}
if(mes.equals("\r\n")){
flag=true;
break;
}
if(mes.equals("")){
flag=true;
break;
}
/*BufferedReader theFile=new BufferedReader(new InputStreamReader(new FileInputStream("g.html")));//pour ouvrir le fichier html et le parcourir en entier
String ll;
ll=theFile.readLine();
System.out.println("je lis le fichier "+ll);
_out.println("<html><div style=\"background-color:red;text-align:center;\">hello everybody</html>");
_out.flush();
while(ll!=null){
_out.println(ll);
ll=theFile.readLine();
}
flag=true;
}
// _out.println("<html><div style=\"background-color:red;text-align:center;\">vous etes :"+_numClient+"</html>");
//_out.flush();
}
catch(Exception e){
}
}
public void sendMsg (String sMsg){
_out.write(sMsg);
_out.flush();
}
}
/*
class Dial extends JFrame implements ActionListener,Runnable{
private JButton okBouton;
private JTextField login;
private JPasswordField pass;
private JLabel log,passs;
private boolean ok;
private Serveur _serv;
private Socket _socket;
private Thread _t;
Dial(){
setTitle("Proxy de mohamed");
setSize(330,200);
Container contenu=getContentPane();
contenu.setLayout(null);
log=new JLabel("Login");log.setBounds(20, 50, 50, 20);contenu.add(log);
JTextField login=new JTextField();login.setBounds(100,50 , 150, 20);contenu.add(login);
okBouton=new JButton("Connexion");
okBouton.setBounds(100,120,100, 20);
contenu.add(okBouton);
okBouton.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
try{
if(e.getSource()==okBouton){
String name=login.getText();
//Dial.setVisible(false);
}
}
catch(Exception ee){
ee.setStackTrace(null);
}
}
public void run() {
System.out.println("ddd");
new ThreadClient(_serv,_socket);
}
}
Conclusion :
vous pouvez rajouter plusieurs fonctionnalités ,ce code est juste une base qui marche bien mais il faut rajouter vos propres fonctions.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.