package de.tudarmstadt.informatik.hostage.logging;
import java.io.Serializable;
import java.net.InetAddress;
import de.tudarmstadt.informatik.hostage.format.LogViewFormatter;
/**
* This class defines the attributes of a record.
* A Record is a single message exchanged between the application and an attacker.
* The class has no own functionality except for getter and setter methods.
* To change the logging mechanism you have to to change the logger in {@link de.tudarmstadt.informatik.hostage.HoneyService HoneyService} and
* {@link de.tudarmstadt.informatik.hostage.ui.ViewLog ViewLog}
* @author Mihai Plasoianu
* @author Lars Pandikow
*/
public class Record implements Serializable {
private static final long serialVersionUID = 1L;
public static enum TYPE {
SEND, RECEIVE
};
private int id;
private long attack_id;
private String protocol;
private TYPE type;
private long timestamp;
private String externalIP;
private InetAddress localIP;
private int localPort;
private InetAddress remoteIP;
private int remotePort;
private String BSSID;
private String SSID;
private double latitude;
private double longitude;
private float accuracy;
private long timestampLocation;
private String packet;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the attack_id
*/
public long getAttack_id() {
return attack_id;
}
/**
* @param attack_id the attack_id to set
*/
public void setAttack_id(long attack_id) {
this.attack_id = attack_id;
}
/**
* @return the protocol
*/
public String getProtocol() {
return protocol;
}
/**
* @param protocol the protocol to set
*/
public void setProtocol(String protocol) {
this.protocol = protocol;
}
/**
* @return the type
*/
public TYPE getType() {
return type;
}
/**
* @param type the type to set
*/
public void setType(TYPE type) {
this.type = type;
}
/**
* @return the timestamp
*/
public long getTimestamp() {
return timestamp;
}
/**
* @param timestamp the timestamp to set
*/
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
/**
* @return the externalIP
*/
public String getExternalIP() {
return externalIP;
}
/**
* @param externalIP the externalIP to set
*/
public void setExternalIP(String externalIP) {
this.externalIP = externalIP;
}
/**
* @return the localIP
*/
public InetAddress getLocalIP() {
return localIP;
}
/**
* @param localIP the localIP to set
*/
public void setLocalIP(InetAddress localIP) {
this.localIP = localIP;
}
/**
* @return the localPort
*/
public int getLocalPort() {
return localPort;
}
/**
* @param localPort the localPort to set
*/
public void setLocalPort(int localPort) {
this.localPort = localPort;
}
/**
* @return the remoteIP
*/
public InetAddress getRemoteIP() {
return remoteIP;
}
/**
* @param remoteIP the remoteIP to set
*/
public void setRemoteIP(InetAddress remoteIP) {
this.remoteIP = remoteIP;
}
/**
* @return the remotePort
*/
public int getRemotePort() {
return remotePort;
}
/**
* @param remotePort the remotePort to set
*/
public void setRemotePort(int remotePort) {
this.remotePort = remotePort;
}
/**
* @return the bSSID
*/
public String getBSSID() {
return BSSID;
}
/**
* @param bSSID the bSSID to set
*/
public void setBSSID(String bSSID) {
BSSID = bSSID;
}
/**
* @return the sSID
*/
public String getSSID() {
return SSID;
}
/**
* @param sSID the sSID to set
*/
public void setSSID(String sSID) {
SSID = sSID;
}
/**
* @return the latitude
*/
public double getLatitude() {
return latitude;
}
/**
* @param latitude the latitude to set
*/
public void setLatitude(double latitude) {
this.latitude = latitude;
}
/**
* @return the longitude
*/
public double getLongitude() {
return longitude;
}
/**
* @param longitude the longitude to set
*/
public void setLongitude(double longitude) {
this.longitude = longitude;
}
/**
* @return the accuracy
*/
public float getAccuracy() {
return accuracy;
}
/**
* @param accuracy the accuracy to set
*/
public void setAccuracy(float accuracy) {
this.accuracy = accuracy;
}
/**
* @return the timestampLocation
*/
public long getTimestampLocation() {
return timestampLocation;
}
/**
* @param timestampLocation the timestampLocation to set
*/
public void setTimestampLocation(long timestampLocation) {
this.timestampLocation = timestampLocation;
}
/**
* @return the packet
*/
public String getPacket() {
return packet;
}
/**
* @param packet the packet to set
*/
public void setPacket(String packet) {
this.packet = packet;
}
@Override
public String toString() {
return String.format("%d %s [%d,%s:%d,%s:%d,%s]", attack_id,
((type == TYPE.SEND) ? "SEND" : "RECEIVE"), timestamp,
localIP.getHostAddress(), localPort, remoteIP.getHostAddress(),
remotePort, LogViewFormatter.format(getProtocol(), getPacket()));
}
/**
* Returns a string representation after a chosen format. Formats should be defined in /res/values/arrays.xml to use with {@link de.tudarmstadt.informatik.hostage.ui.ViewLog#exportDatabase(android.view.View) exportDatabase(...)}
* The Integer representation of the format is equal to its position in the format array.
* @param format Integer representation of the format.
* @return A string representation after chosen format.
*/
public String toString(int format){
// Choose String Format
switch (format){
// ViewLogTable format: contains all important information about an attack.
case 0:
return String.format("%d: %s %s\nIn %s\n(%s)\nFrom [%s:%d]\nTo [%s:%d]\nLatitude: %f\nLongitude: %f\n%s\n\n", attack_id, protocol, ((type == TYPE.SEND) ? "SEND" : "RECEIVE"), SSID, BSSID, remoteIP.getHostAddress(), remotePort, localIP.getHostAddress(), localPort, getLatitude(), getLongitude(), LogViewFormatter.format(getProtocol(), getPacket()));
// TraCINg Upload format, replaces internal ip's with external ip of network
case 1:
return String.format("{ \"sensor\":{\"type\": \"Honeypot\", \"name\": \"HOsTaGe\"}, \"type\": \"%s\", \"src\":{\"ip\": \"%s\", \"port\": %d}, \"dst\":{\"ip\": \"%s\", \"port\": %d} }", protocol + " server access", externalIP, remotePort, externalIP, localPort);
default:
return toString();
}
}
}