HTTP Seltsames Charset

X

Xyz1

Gast
Moin Moin,
ich bin dabei eine Map zu basteln, von wo aus Angriffe auf meinen Server laufen, aber ich bekomme dabei ganz komische Reponses:
{"ip":"45.227.xxx.xx","type":"ipv4","continent_code":"NA","continent_name":"North America","country_code":"BZ","country_name":"Belize","region_code":null,"region_name":null,"city":null,"zip":null,"latitude":17.25,"longitude":-88.75,"location":{"geoname_id":null,"capital":"Belmopan","languages":[{"code":"en","name":"English","native":"English"},{"code":"es","name":"Spanish","native":"Espa\u00f1ol"}],"country_flag":"http:\/\/assets.ipstack.com\/flags\/bz.svg","country_flag_emoji":"\ud83c\udde7\ud83c\uddff","country_flag_emoji_unicode":"U+1F1E7 U+1F1FF","calling_code":"501","is_eu":false}}

Kennt jmd vielleicht diesen Zeichensatz und Maskierung?

(Das ist jetzt nur ein Beispiel, Belize liegt an der Grenze zu Mexico, mit 20 Angriffen pro Minute)
 
X

Xyz1

Gast
Es hat geklappt - mit der gson Api:
{continent_name=North America, zip=null, city=null, ip=45.227.xxx.xx, latitude=17.25, continent_code=NA, type=ipv4, country_code=BZ, country_name=Belize, region_name=null, location={geoname_id=null, capital=Belmopan, languages=[{code=en, name=English, native=English}, {code=es, name=Spanish, native=Español}], country_flag=http://assets.ipstack.com/flags/bz.svg, country_flag_emoji=??, country_flag_emoji_unicode=U+1F1E7 U+1F1FF, calling_code=501, is_eu=false}, region_code=null, longitude=-88.75}
Gson bekommt das mühelos hin
Java:
HashMap<String, Object> map2 = gson.fromJson(new InputStreamReader(new URL("http://..." + adr.ip + "?access_key=...").openStream()), new TypeToken<HashMap<String, Object>>() {}.getType());


Die 10 häufigsten Attacker kommen aus, USA, Belize, Rumänien, Weißrussland, zweimal Moskau und sogar die Seychellen sind mit dabei. Hier mal ein verkleinerter Ausschnitt der Karte (darf ich das?)
11692

Das Schwerste daran ist leider, Latitude und Longitude nach (x,y) umzurechnen. :D
 
X

Xyz1

Gast
Hier ist mal eine Liste mit den Koords, einer Bezeichnung von a-z, der absoluten gezählten Häufigkeit der Angriffe und einer Farbe von starkrot bis Weiß:
Code:
17.25,-88.75,A(265),#ff0000
37.751,-97.822,B(209),#c90000
55.7386,37.6068,C(112),#6b0000
-4.5833,55.6667,D(71),#440000
55.7386,37.6068,E(49),#2f0000
55.0969,36.6103,F(37),#230000
47.0188,28.8128,G(35),#210000
55.7386,37.6068,H(35),#210000
55.7386,37.6068,I(35),#210000
47.0188,28.8128,J(34),#200000
55.7386,37.6068,K(31),#1d0000
55.7386,37.6068,L(31),#1d0000
55.7386,37.6068,M(29),#1b0000
52.3824,4.8995,N(27),#190000
52.3824,4.8995,O(27),#190000
52.3824,4.8995,P(26),#190000
52.3824,4.8995,Q(26),#190000
52.3824,4.8995,R(25),#180000
52.3824,4.8995,S(24),#170000
55.7386,37.6068,T(23),#160000
55.7386,37.6068,U(22),#150000
55.7386,37.6068,V(18),#110000
55.7386,37.6068,W(18),#110000
55.7386,37.6068,X(18),#110000
30.294,120.1619,Y(17),#100000
55.7386,37.6068,Z(17),#100000

Das Problem ist nur, das alles sind Onion- oder *IX Endpoints (siehe hier), dh man kann damit nichts anfangen und man kann die auch nicht weiter untersuchen :D mein Ansatz bringt also nix...
 
X

Xyz1

Gast
@mihe7 :
Java:
Pattern p = Pattern.compile("SRC=(\\d+.\\d+.\\d+.\\d+)");
// read ip addresses into a map

// take them into a list and sort it
ArrayList<Adr> list = new ArrayList<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    list.add(new Adr(entry.getKey(), entry.getValue()));
}
Collections.sort(list);
while (list.size() > 26) {
    list.remove(list.size() - 1);
}

// bulk request wished?
StringBuilder sb = new StringBuilder();
sb.append("http://api.ipstack.com/");
for (Adr adr : list) {
    sb.append(adr.ip);
    sb.append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("?access_key=haha");
// do it

// or single requests wished?
float f = 1f / list.get(0).count * 255f;
Gson gson = new Gson();
for (int i = 0; i < 26; i++) {
    Adr adr = list.get(i);
    HashMap<String, Object> map2 = gson.fromJson(
        new InputStreamReader(new URL("http://api.ipstack.com/" + adr.ip + "?access_key=haha").openStream()),
        new TypeToken<HashMap<String, Object>>() { }.getType());
    System.out.println(map2.get("latitude") + "," + map2.get("longitude") + "," + (char) ('A' + i) + "(" + adr.count + "),#" + String.format("%02x", (int) (adr.count * f)) + "0000");
    try (PrintWriter pw = new PrintWriter("folder\\prefix_" + i + "_" + adr.count + ".txt")) {
        pw.println(map2.toString());
    }
}

System.out.println("fertig");
 

Ähnliche Java Themen

Neue Themen


Oben