ZADATAK 1 -
checkboxovi
layout/main_activity.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cb1"
android:checked="false"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cb2"
android:checked="false"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cb3"
android:checked="false"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cb4"
android:checked="false"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cb5"
android:checked="false"/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_tekst"
android:id="@+id/btnIspis"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvIspis"/>
</LinearLayout>
MainActivity.java
package com.MI1.zadatak1;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnIspis = (Button) findViewById(R.id.btnIspis);
btnIspis.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int brojOznacenih = vratiBrojOznacenih();
ispisi(brojOznacenih);
}
});
}
private int vratiBrojOznacenih () {
int rezultat = 0;
if (cbOznacen(R.id.cb1))
rezultat++;
if (cbOznacen(R.id.cb2))
rezultat++;
if (cbOznacen(R.id.cb3))
rezultat++;
if (cbOznacen(R.id.cb4))
rezultat++;
if (cbOznacen(R.id.cb5))
rezultat++;
return rezultat;
}
private boolean cbOznacen (int id) {
return ((CheckBox) findViewById(id)).isChecked();
}
private void ispisi (int brojOznacenih) {
TextView tvIspis = (TextView) findViewById(R.id.tvIspis);
if (brojOznacenih == 0)
tvIspis.setText(R.string.nema_oznacenih_tekst);
else if (brojOznacenih == 5)
tvIspis.setText(R.string.svi_oznaceni_tekst);
else {
String tekst = getResources().getString(R.string.neki_oznaceni_tekst);
tvIspis.setText(tekst + String.valueOf(brojOznacenih));
}
}
}
__________________________________________________________________________________________________________
ZADATAK 2 - krugovi
layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.biuk.zad2.MainActivity">
<com.example.biuk.zad2.Krugovi
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/krugovi"/>
</RelativeLayout>
MainActivity.java
package com.example.biuk.zad2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
Krugovi krugovi;
//NasaKontrola nasaKontrola;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// nasaKontrola= (nasaKontrola)findViewById(R.id.nasaKontrola);
//nasaKontrola.posataviRadijus(10);
krugovi = (Krugovi)findViewById(R.id.krugovi);
krugovi.postaviVrijednost(2, 0.6f);
}
}
Krugovi.java
package com.example.biuk.zad2;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by BIUK on
11/21/2016.
*/
public class Krugovi extends View {
public Krugovi(Context context) {
super(context);
init();
}
public Krugovi(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public Krugovi(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private Paint pPuniKrug;
private Paint pPrazniKrug;
private void init()
{
pPrazniKrug = new Paint();
pPrazniKrug.setColor(Color.BLACK);
pPrazniKrug.setStyle(Paint.Style.STROKE);
pPuniKrug= new Paint();
pPuniKrug.setColor(Color.BLUE);
pPuniKrug.setStyle(Paint.Style.FILL);
}
private int
brojOznacenihKrugova=0;
private float prozirnost=0;
@Override
protected void onDraw(Canvas canvas) {
//Paint paint= new Paint();
//paint.setColor(Color.BLUE);
//paint.setStyle(Paint.Style.FILL);
//canvas.drawCircle(200,200,100,paint);
float radijus=100;
float x=250;
float y=250;
Paint pTrenutno=null;
for (int i=1; i<=3; i++)
{
if (i>brojOznacenihKrugova)
pTrenutno = pPrazniKrug;
else
pTrenutno= pPuniKrug;
canvas.drawCircle(x, y, radijus, pTrenutno);
x+=radijus + radijus/2;
radijus /=2;
}
setAlpha(1-prozirnost);
}
public void postaviVrijednost(int brojOznacenihKrugova, float prozirnost)
{
this.brojOznacenihKrugova= brojOznacenihKrugova;
this.prozirnost= prozirnost;
invalidate();
}
}
__________________________________________________________________________________________________________
ZADATAK 3 - adapter
lista
layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lvStavke"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
layout/stavka.xml
<?xml version="1.0" encoding="utf-8"?>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/tvStudent"
android:layout_row="0"
android:layout_column="0"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/tvPredmet"
android:layout_row="1"
android:layout_column="0"
android:layout_marginLeft="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/tvOcjena"
android:layout_row="0"
android:layout_column="1"
android:layout_rowSpan="2"
android:layout_gravity="center_vertical|right" />
</GridLayout>
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("aaaa","aaaaaa");
setContentView(R.layout.main);
Log.d("bbbbb","bbbbbbb");
ListView lvStavke = (ListView) this.findViewById(R.id.lvStavke);
Log.d("cccccc","cccccccc");
ArrayList<Stavka> stavke = new ArrayList<Stavka>();
Log.d("fffff","fffff");
stavke.add(new Stavka("Ana", "Anić", "Matematika", 5));
stavke.add(new Stavka("Ivo", "Ivić", "Programiranje", 4));
stavke.add(new Stavka("Marko", "Marković", "Baze podataka", 5));
Log.d("ddddd","dddd");
StavkaAdapter adapter = new StavkaAdapter(this, R.layout.stavka, stavke);
lvStavke.setAdapter(adapter);
}
}
Stavka.java
package com.MI1.zadatak3;
public class Stavka {
private String imeStudenta;
private String prezimeStudenta;
private String nazivPredmeta;
private int ocjenaNaIspitu;
public Stavka(String imeStudenta, String prezimeStudenta, String nazivPredmeta,
int ocjenaNaIspitu) {
this.imeStudenta = imeStudenta;
this.prezimeStudenta = prezimeStudenta;
this.nazivPredmeta = nazivPredmeta;
this.ocjenaNaIspitu = ocjenaNaIspitu;
}
public String getImeStudenta() {
return imeStudenta;
}
public void setImeStudenta(String imeStudenta) {
this.imeStudenta = imeStudenta;
}
public String getPrezimeStudenta() {
return prezimeStudenta;
}
public void setPrezimeStudenta(String prezimeStudenta) {
this.prezimeStudenta = prezimeStudenta;
}
public String getNazivPredmeta() {
return nazivPredmeta;
}
public void setNazivPredmeta(String nazivPredmeta) {
this.nazivPredmeta = nazivPredmeta;
}
public int getOcjenaNaIspitu() {
return ocjenaNaIspitu;
}
public void setOcjenaNaIspitu(int ocjenaNaIspitu) {
this.ocjenaNaIspitu = ocjenaNaIspitu;
}
}
StavkaAdapter.java
package com.MI1.zadatak3;
import java.util.List;
import com.MI1.zadatak3.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class StavkaAdapter extends ArrayAdapter<Stavka> {
public StavkaAdapter(Context context, int resource, List<Stavka> objects) {
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Stavka stavka = this.getItem(position);
if (convertView == null)
convertView =
LayoutInflater.from(this.getContext()).inflate(R.layout.stavka, null);
TextView tvStudent = (TextView) convertView.findViewById(R.id.tvStudent);
TextView tvPredmet = (TextView) convertView.findViewById(R.id.tvPredmet);
TextView tvOcjena = (TextView) convertView.findViewById(R.id.tvOcjena);
tvStudent.setText(String.format("%s, %s", stavka.getPrezimeStudenta(),
stavka.getImeStudenta()));
tvPredmet.setText(stavka.getNazivPredmeta());
tvOcjena.setText(String.valueOf(stavka.getOcjenaNaIspitu()));
return convertView;
}
}
__________________________________________________________________________________________________________
ZADATAK 4 - baza
layout/activity_main.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
MainActivity.java
package com.mi2.zadatak1;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
BazaOpenHelper.java
package com.mi2.zadatak1;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class BazaOpenHelper extends SQLiteOpenHelper{
public BazaOpenHelper(Context context, String name,
SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE Mjesto (ID integer primary key, Naziv text,
BrojStanovnika integer, ZupanijaID integer)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS Mjesto");
this.onCreate(db);
}
}
MjestoContentProvider.java
package com.mi2.zadatak1;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
public class MjestoContentProvider extends ContentProvider
{
public static final String AUTHORITY = "com.mi2.mjestoprovider";
public
static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/mjesta");
public static final String TABLICA_MJESTO = "Mjesto";
public static final String KOLONA_ID = "ID";
public static final String KOLONA_NAZIV= "Naziv";
public static final String KOLONA_BROJSTANOVNIKA = "BrojStanovnika";
public static final String KOLONA_ZUPANIJAID = "ZupanijaID";
private BazaOpenHelper bazaOH;
private static final int MJESTA = 1;
private static final int MJESTA_ID = 2;
private UriMatcher uriMatcher;
@Override
public boolean onCreate() {
this.bazaOH = new BazaOpenHelper(this.getContext(), "baza.db", null, 1);
this.uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
this.uriMatcher.addURI(AUTHORITY, "mjesta", MJESTA);
this.uriMatcher.addURI(AUTHORITY, "mjesta/#", MJESTA_ID);
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(TABLICA_MJESTO);
if (this.uriMatcher.match(uri) == MJESTA_ID)
{
String id = uri.getLastPathSegment();
queryBuilder.appendWhere(KOLONA_ID + "=" + id);
}
SQLiteDatabase db = this.bazaOH.getWritableDatabase();
return queryBuilder.query(db, projection, selection, selectionArgs, null,
null, sortOrder);
}
@Override
public String getType(Uri uri) {
switch (this.uriMatcher.match(uri))
{
case MJESTA:
return "vnd.android.cursor.dir/vnd.demo.mjesto";
case MJESTA_ID:
return "vnd.android.cursor.item/vnd.demo.mjesto";
}
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return -1;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
SQLiteDatabase db = this.bazaOH.getWritableDatabase();
if (this.uriMatcher.match(uri) == MJESTA_ID)
{
String id = uri.getLastPathSegment();
String where = KOLONA_ID + "=" + id;
if (selection == null)
selection = where;
else
selection = selection + " AND (" + where + ")";
}
int brojRedaka = db.update(TABLICA_MJESTO, values, selection,
selectionArgs);
this.getContext().getContentResolver().notifyChange(uri, null);
return brojRedaka;
}
}
Ø
Tuneliranje – mehanizam koji se koristi kada želimo prenijeti određeni
protokol preko mreže koja ga ne podržava.
o
Ako je tunel kriptiran u trenutku kada podaci
dođu na kraj tunela oni se dekriptiraju i odlaze u mrežu ne kriptirani ovo treba
imati na umu
o
U nekim slučajevima želimo ostvariti L2 vezu
prema drugoj lokaciji i za to koristimo L2 tuneliranje. Takvo tuneliranje nam
omogućava direktnu L2 vidljivost između uređaja iza tunela.
Ø
MTU
o
Bitna stvar koju također treba imati na umu je
MTU na putanji do odredišta (MaximumTransmissionUnit) što je zapravo maksimalna
veličina paketa koji se može poslati preko nekog linka bez fragmentiranja paketa
o
Maksimalna veličina IP datagrama je
65535 bytova (većina linkova to ne
podržava pa se radi fragmentacija)
Ø
Problemi
kod Fragmentiranja
o
Veće korištenje CPU i memorije uređaja za
pošiljatelja i primatelja (uređaji koji su spojeni linkom preko kojeg se radi
fragmentacija) iako malo više za primatelja jer mora sve te fragmente presložiti
u originalni IP datagram
o
Nedostatak je što usmjernici za fragmentiranje
koriste maksimalan buffer zato što ne mogu znati koja je veličina IP datagrama
koji će primiti u fragmentima dok god ne primi zadnji fragment
Ø
VPN
-(Virtual Private Network)
o
Karakteristike VPN konekcija:
§
Dostupnost (Internet)
§
Uštede (Korištenje postojeće opreme)
§
Skalabilnost mreže (Jednostavno povezivanje više
lokacija po potrebi)
§
Sigurnost (Korištenje enkripcijskih algoritama)
o
Lokacija (Site to Site to -S2S)
o
VPN udaljenog pristupa (Remote access VPN)
o
VPN tuneliranje omogućava korištenje javne mreže
poput Interneta kao vlastite privatne mreže (mogu biti kriptirane, ali i bez
enkripcije)
o
Za to se koriste razni protokoli pomoću kojih se
promet enkapsulira između ishodišta i odredišta
o
Dodatno enkapsulacija sadrži informacije potrebne
za prijenos originalnih podataka na drugi kraj tunela
o
Na kraju tunela se dekapsuliraju originalni
podaci i šalju na odredišno računalo
o
Dakle,
tuneliranje uključuje proces enkapsulacije, prijenosa i dekapsulacije da bi se
dobili originalni podaci
o
Neki od protokola koji se mogu koristiti su:
§
Ipsec način rada (Internet Protocol Security)
§
PPTP (Point to Point Tunnelling Protocol)
§
L2F (Layer 2 Forwarding)
§
L2TP (Layer 2 Tunelling Protocol)
§
GRE (GenericRouting Encapsulation)
Ø
GRE
(Generic Route Encapsulation)
o
GRE Tunneling protokol je razvio Cisco, ali je
danas standard (RFC 2784) i služi za enkapsulaciju različitih tipova paketa
(razne protokole)
o
GRE enkapsulacijom stvara Virtualni
point-to-point link između dvije udaljene lokacije
o
GRE protokol enkapsulira “payload” odnosno
unutarnji IP paket koji se treba prebaciti u odredišnu mrežu preko neke javne
mreže u vanjski IP paket
o
Na odredištu GRE enkapsulacija se makne i paket
se prosljeđuje na odredište
o
GRE tunel može prenijeti različite protokole
preko mreže koja ih ne podržava (npr. Multicast, routing protokole, IPv6
promet), može povezati diskontinuirane
mreže
o
GRE tunel omogućava VPN preko WAN mreža
o
GRE tunel pruža privatnu vezu (zbog enkapsulacije
koja je različita od one u mreži kroz koju se stvara tunel), ali nije sigurna (nema
kriptiranja), zato se kombinira s protokolima
IPSec-om
Ø
Site to
Site – S2S
o
računala prosljeđuju promet kroz VPN pristupnik
(engl. gateway) koji može biti usmjernik ili vatrozid
o
VPN gateway je odgovoran za kriptiranje i
enkapsuliranje odlaznog prometa i
slanje kroz VPN tunel prema drugom kraju VPN tunela na kojemu se također nalazi
VPN gateway
o
Na odredištu, VPN gateway ukloni zaglavlje paketa
kojim je enkapsuliran orginalni paket, dešifrira originalni paket i pošalje ga u
privatnu mrežu
Ø
VPN
udaljenog pristupa (Remote access VPN)
o
koriste ga mobilni korisnici i udaljeni
zaposlenici (telecommuters)
o
Udaljeni zaposlenici mogu uspostaviti VPN vezu i
povezati se u mrežu svoje organizacije iz svojih domova ili sa bilo kojeg mjesta
na kojem imaju pristup Internetu
o
U ovom tipu VPN povezivanja, klijent mora
pokrenuti klijentski VPN program koji enkapsulira i kriptira odlazne podatke
o
Na odredištu, VPN pristupnik (engl. gateway)
obrađuje dobivene podatke kao i kod lokacija-2-lokacija VPN povezivanja
Ø
IPSEC
(Internet Protocol Security)
o
IPSec set standarda definira informacije koje se
moraju dodati IP paketu da bi se osigurala povjerljivost podataka, integritet
podataka i autentikacija, te način kriptiranja sadržaja paketa
o
Prednosti IPSec-a:
§
povjerljivost podataka (data confidentiality)
§
integritet podataka (data integrity)
§
autentikacija (authentication)
o
Moguće je dodati nove algoritme u IPSec okvir i
koristiti ih prema potrebi (skalabilnost)
o
Možemo koristiti bilo koju kombinaciju algoritama
ali mora biti isto na obje strane tunela
o
Dva načina rada:
§
Transport mode (prijenosni) – ne koristi se
·
šifrira se samo podatkovni dio paketa, a IP zaglavlje se ne mijenja
·
Prednost ovog načina je da se svakom paketu dodaje svega nekoliko okteta
·
Nedostatak je što se zbog nešifriranog IP zaglavlja mogu pročitati orginalna
ishodišna i odredišna adresa
§
Tunnel mode – vrlo često se koristi
·
obje strane moraju biti konfigurirane da koriste IPSec tuneliranje
·
IPSec tuneliranje koristi dogovorene mehanizme za enkapsulaciju i šifriranje
čitavih IP paketa (IP zaglavlje + podaci)
·
osigurava potpuno siguran prijenos podataka
o
IPSec protokoli za pregovaranje
§
AH (Authentication Header) – nije nužan
·
koristi se za autentikaciju pošiljatelja i integritet podataka bez kriptiranja
(IP protokol 51)
·
Ima problem u radu s NAT-om, pošto autenticira cijeli paket na promjene (a NAT
je promjena paketa)
§
ESP (Encapsulated Security Payload) – potreban
·
koristi se također za autentikaciju pošiljatelja i integritet, ali uz upotrebu
mehanizama za šifriranje (IP protokol 50)
·
Ključ poznaju samo primatelj i pošiljatelj
·
Ako su autentikacijski podaci ispravni, primatelj može biti siguran da su podaci
stigli od pošiljatelja, te da nisu promijenjeni
o
IPSEC enkripcijski protokoli:
§
DES (Data Encryption Standard)-simetrični
·
razvijen u IBM-u, koristi 56 bitni ključi
osigurava šifriranje visoke kvalitete
o
3DES (novija varijanta DES algoritma)-simetrični
o
AES (Advanced Encryption Standard)-simetrični
§
AES omogućava veću zaštitu od DES algoritma
§
AES nudi tri različite duljine ključa: 128, 192 i
256 bita
o
RSA (Rivest, Shamir, and Adleman)-asimetrični
§
Asimetrični algoritam za širiranje
§
Ključ može biti od 512, 768, 1024 bit i više
o
DH (Diffie Helman) –asimetrični
§
Za izmjenu tajnih ključeva na siguran način
o
IPSEC Integritet podataka:
§
HASH algoritam pridonosi integritetu podataka
tako da provjerava da li su podaci na putu od ishodišta do odredišta mijenjani
§
Pošiljatelj generira hash broj iz poruke koju
šalje i broj šalje zajedno sa porukom, primatelj dešifrira poruku i hash broj,
zatim generira novi hash broj iz dobivene poruke, te usporedi ta dva hash broja.
Ako su isti, integritet poruke je zadržan, odnosno poruka nije mijenjana
§
IPSec koristi HMAC (Hashed Mesage
Authentication)(2):
·
MD5 (Message Digest 5)
o
koristi 128 bitni zajednički ključ
o
Poruka i ključ se kombiniraju i primjene na
HMAC-MD5 hash algoritam
o
Rezultat je 128 bitni hash broj
o
Broj se dodaje orginalnoj poruci i prosljeđuje na
odredište
·
SHA-1 (Secure Hash Algorithm 1)
o
koristi 160 bitni ključ
o
Poruka i ključ se kombiniraju i primjene na
HMAC-SHA-1 hash algoritam
o
Rezultat je 160 bitni hash broj
o
Broj se dodaje originalnoj poruci i prosljeđuje
na odredište
o
IPSEC Digitalni potpis (Certifikat):
§
služi za identifikaciju, odnosno provjeru
autentičnosti (potvrdu da je pošiljatelj zaista onaj za kojega se izdaje)
§
Iz poruke pošiljatelj izračunava sažetak poruke
(message digest)
§
PKI (Public Key Infrastructure)
§
Sažetak se kriptira privatnim ključem i dobije se
jedinstveni digitalni potpis koji se šalje zajedno sa sažetkom poruke i izvornom
porukom
§
Primatelj može utvrditi autentičnost pošiljatelja
takve poruke dekriptirajući
digitalni potpis javnim ključem
o
Vrste enkripcije:
§
SIMETRIČNA(Manja sigurnost-manje cpu snage)
·
Par uređaja (usmjernik, VPN koncentrator...)
koriste isti ključ za kriptiranje i dekriptiranje podataka (SHARED SECRET)
§
ASIMETRIČNA (Veća sigurnost-više cpu snage)
·
Par uređaja (usmjernik, VPN koncentrator...)
koriste jedan ključ za kriptiranje, a drugi ključ za dekriptiranje podataka
(PUBLIC-PRIVATE KEY)
o
Sva komunikacija koja ide u VPN tunel (permit u
ACL za VPN) mora se zabraniti u ACL koja se koristi za NAT
§
deny any 10.0.0.0
0.255.255.255
Ø
DMVPN
o
Dynamic multipoint VPN tuneli su kombinacija GRE
(multipoint GRE), NHRP i IPSec mehanizama
o
NHRP (Next Hop Resolution Protocol) je L2
protokol koji omogućava ruterima na izdvojenim lokacijama da koriste dinamičke
IP adrese
o
Topologija je Hub-and-Spoke, ali s direktnom
komunikacijom između spoke usmjernika (nakon što ostvare vezu sa HUB uređajem)
o
Jedina IP adresa koja mora biti statička je IP
adresa HUB uređaja i ona je neka javna (od ISP-a)
Ø
L2TPv3
o
L2TP (Layer2 Tunneling Protocol) je industrijski
standard za L2 tuneliranje koji omogućava interoperabilnost različitih vendora i
ne zahtjeva korištenje MPLS-a u pozadini
o
L2TP omogućava prijenos bilo kojeg L2 protokola
između krajnjih točaka
o
Sam po sebi nema enkripciju, ali se kombinira s
IPSec
o
Koristi se u ISP okruženju, data centrima, za
proširenje LAN segmenata (česta upotreba) itd…
o
Proširenje LAN segmenta u slučaju kada želimo da
više korisničkih lokacija povežemo kao kada bi se povezivali preko preklopnika
Ø
IPv6
o
8 skupina po 16 bitova = 128-bit hexadecimalni
format
o
16 bitova = hextet – hexadecimalna polja odvojena
dvotočkama
o
Prve nule (leading zeroes) u bilo kojem hextetu
(nizu od 16 bitova) se mogu ispustiti (ne moramo ih pisati)
§
Adresa prije ispuštanja nula:2001:0DB8:0001:5270:0127:00AB:CAFE:0E1F
/64
§
Adresa poslije ispuštanja
nula:2001:DB8:1:5270:127:AB:CAFE:E1F /64
§
Ovo vrijedi samo za prve nule (Leadingzeroes)
zadnje nule (trailingzeroes) ne mogu se ispuštati isto kao i nule u sredini)
Ø
o
IPv6 adresiranje se radi po istom principu kao i
kod IPv4
§
/127 dobijemo 2 adrese
§
/124 dobijemo 16 adresa
§
/120 dobijemo 256 adresa
o
Prva adresa je sačinjena od
nula0000:0000:0000:0000:0000:0000:0000:0000
o
Zadnja adresa je sačinjena od
FFFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
o
Preporuka je da se koristi /64 radi
konzistentnosti unutar mreže i efikasnijeg routinga, te općenito upravljanja
IPv6 adresama
o
korisnicima će ISP dijeliti uglavnom /56 ili /60
Ø
Vrste IPv6 adresa
o
Global Unicast
o
Multicast
o
Unspecified
o
Loopback
o
Link Local
o
Unique Local Address (ULAs)-privatne
o
Documentation
o
6 to 4 tunneling
o
Teredo tunneling
o
IANA Global Routing Number – Globalna unicast
adresa za usmjeravanje prometa na razini Interneta
§
Prva 3 bita su predefinirana kao 001 binarno
odnosno hex 2000::/3...raspon je od 2000-3FFF
Ø
Multicast IPv6 adresni prostor
o
Multicast adresa definira grupu sučelja
(interface)
o
Sve Multicast adrese definirane su rezerviranim
adresnim prostorom FF00::0/8 – 1111 1111 0000 0000 .....
o
Paket koji se šalje na neku multicastadresu doći
će na sva računala koja koriste tu IPv6 adresu
Protocol |
IPv4 Multicast |
IPv6 Multicast |
OSPF (Router) |
224.0.0.5 |
FF02::5 |
OSPF (DR/BDR) |
224.0.0.6 |
FF02::6 |
RIPv2 |
224.0.0.9 |
FF02::9 |
EIGRP |
224.0.0.10 |
FF02::A |
o
Unspecified IPv6 adresa su sve nule ::/128
...samo kao source kod DHCP requesta
o
LoopbackIPv6 adresa ::1/128
o
L2 Multicast adrese kod IPv6-OSPF su 48 bitova
nastaju tako što prvih 16 bitova u HEX zapisu su definirani kao 3333, a ostala
32 bita dobijemo doslovno iz L3 multicast IPv6 adrese
Ø
Vrste IPv6 adresa
o
fc00::/7 privatni adresni prostor
o
2001:db8::/32 Za dokumentaciju, nikad se ne
koriste za komunikaciju
o
2002::/16 6 to 4 tunneling, router koji radi 6to4
dodaje svoju IPv4 adresu u 2002::/16 i tako stvara jedinstvenu /48 IPv6 adresu.
Ovaj proces se na odredištu radi unazad kako bi se dobila IPv4 adresa
pošiljatelja
o
2001:0000::/32 Teredo tunneling-omogućava IPv6
adresama da prođu kroz IPv4 NAT (dio od IANA prostora)
o
ANYCAST adresa
§
Je istog oblika kao i Unicast
§
Primjena za DNS clustere i CDN mreže
§
Paket poslan na Anycast adresu će doći samo do
najbližeg člana grupe
o
LINK-LOCAL ADDRESS
§
Koriste se na jednom lokalnom linku
§
Link-Localaddresese automatski konfiguriraju na
svim sučeljima (bez ljudske intervencije)
§
Prefix koji se koristi za Link-Localaddreseje
FE80::/10
§
Usmjernici(Ruteri) ne prosljeđuju pakete koji
imaju source ili destination Link-local IPv6 ad
§
fe80::dd21:d5f0:7aab:b502%10
·
%10 je zoneID-potreban je zato što su sve link
local ipv6 adrese u istom subnetu, ali na više sučelja..štoinače ne može
funkcionirati. Omogućava računalu da zna gdje poslati paket..nakoji link local
scope/interface
Ø
IANA RIRs
o
ARIN
o
LACNIC
o
AFRINIC
o
RIPE NCC
o
APNIC
Ø
IPv6 adresni prostor
o
2001:0000::/23 –IANA (za razne potrebe)
o
2001:0200::/23 –APNIC (Asia/Pacific Region)
o
2001:0400::/23 –ARIN (North America Region)
o
2001:0600::/23 –RIPE NCC(Europe, Middle East and
Central Asia)-Network Coordination Center
o
Najmanji IPv6 prefiks koji dijeli RIPE je /48 /.
o
2a00:0000::/12 neki naši ISP imaju IPv6 adrese u
ovom rasponu npr...
§
OptimaAS34594 2a02:ac8::/32
§
PCK AS61211 2a03:bb40::/32
§
B-net AS31012 2a00:dd8::/32
Ø
Struktura IPv6 adresa
Ø
Karakteristike IPv6
o
Veći adresni prostor (128 bitna adresa)
o
Eliminacija NAT-a
o
Eliminacija Broadcasta
o
Jednostavniji Header - za jednostavnije
usmjeravanje prometa
o
Višestruke adrese na jednom sučelju
o
Link-local adrese –automatski ih generiraju
uređaji (koriste ih IGP kao next-hop)
Ø
Solicited-nodeaddress/multicastgroup(SNMA)
o
To je link-local multicast adresa i koristi se za
Layer 3 to Layer 2 address resolution (IPv6 NeighborDiscovey-ND)
o
Solicitation znači da Računalo A pita samo
Računalo B koja je njegova MAC adresa, a ne sve kao kod ARP-a gdje se šalje
broadcast
o
ff02:0:0:0:0:1:ff00::/104 plus zadnja 24 bita
IPv6 addrese
Ø
Usmjeravanje paketa sa ipv6 protokolom
o
Prije konfiguracije usmjeravanja IPv6 moramo
globalno uključiti IPv6 unicast-routing
o
RIPng
o
OSPFv3 (router ID -> IPv4 adresa)
o
EIGRP(router ID -> IPv4 adresa)
Ø
Prijelazne metode
o
Izvorni IPv6 (Native IPv6)
– izgradnja IPv6 infrastrukture
od početka, problem je što ne rade svi na ovakav način (razni su
razlozi..troškovi, znanje, podrška za aplikacije, oprema…)
o
Dvostruki stog(Dual-Stack) – preferirani
mehanizam. Uređaji podržavaju istovremeno IPv4 i IPv6. IPv4 i IPv6 koegzistiraju
neovisno jedan o drugome (slično je bilo kod migracije IPX na IPv4)
Ø
Tuneliranja(Tunneling) – povezivanje izoliranih
IPv6 mreža preko postojeće IPv4 jezgre (ili Interneta)
o
Usmjernik-Usmjernik
o
Računalo-Usmjernik
o
Računalo-Računalo
Ø
IPv6 Prevođenja(Translation techniques)
o
Network AddressTranslation-Protocol
translation(NAT-PT)
o
NAT
Ø
IPv6 tuneliranje
o
Pet načina tuneliranja IPv6 mreže preko IPv4
mreža (Overlay tunnel):
1.
Manual IPv6 tunnels
§
ekvivalent trajnom linku između dvije IPv6 mreže
povezane IPv4 mrežom/okosnicom
§
Koristimo kada nam treba česta komunikacijaizmeđu
tih lokacija
§
IPv6 adresa se ručno konfigurira na “tunnel”
sučelju
2.
Automatic IPv4-Compatible tunnels
§
tunnels koriste IPv4-compatible IPv6 adrese
§
To su IPv6 unicast adrese koje imaju sve nule u
prvih 96 bitova IPv6 adrese
§
Ruteri na krajevima tunela moraju podržavati IPv4
i IPv6 adrese..nije skalabilno za velike mreže
3.
IPv6-preko-IPv4 korištenjem GRE enkapsulacije
(tunela)
§
Slično kao i “manual IPv6 Tunnels” služi za
stalne veze
§
Ruteri na oba kraja moraju održavati IPv4 i IPv6
(“Dual Stack”)
4.
Automatic 6to4 tunnels
§
Povezuju izolirane IPv6 mreže preko IPv4 mreže
(na razini paketa), ali je razlika u odnosu na ručno konfigurirane tunele to što
su ove veze point-to-multipoint, za razliku od point-to-point kod ručnih tunela
§
Odredište tunela se određuje na temelju IPv4
adrese graničnih rutera koja je izvučena iz IPv6 adrese koja počinje prefiksom
2002::/16
5.
Intra-Site Automatic Tunnel Addressing Protocol
(ISATAP) Tunnels
§
automatski overlay mehanizam koji koristi IPv4
mrežu kao osnovu za povezivanje IPv6 mreža.
§
ISATAP se koristi unutar mreže na lokaciji gdje
ne postoji IPv6 infrastruktura, ali imamo računala koja su IPv6
§
Računala moraju biti “Dual Stack” unutar lokalne
mreže da bi mogla komunicirati
Ø
Glavna razlika između pojedinih metoda je način
na koji se definiraju izvor i odredište prometa
Ø
IPv6 ACL
o
IPv6 podržava samo named, extended access lists.
o
IPv6 ACL koriste /XX umjesto wildcard maske
o
IPv6 ACLse primjenjuju na sučelje korištenjem
naredbe “ipv6 traffic-filter”
o
IPv6 ACLse primjenjuju na VTY linije naredbom
“ipv6 access-class
Neka pitanja:
Koje parametre za IPSec konekciju bi odabrali za spajanje s
bankom, a koje za spajanje s malom tvrtkom i zašto?
Što bi učinili u slučaju da su LAN mreže koje trebaju biti
povezane IPSec tunelom iste i kako bi ocijenili to rješenje?
Što je potrebno uzeti u obzir prilikom izrade adresne sheme
za prijelaz s IPv4 na IPv6?
U slučaju velikog broja lokacija koje trebaju migrirati na
IPV6 koje rješenje bi odabrali i zašto?
IANA Globalni
adresni prostor
2000::/3, odnosno 2000-3FFF
Multicast IPv6
adresni prostor
·
FF00::0/8 do 1111 1111 0000 0000
·
FF02::5
OSPF (Router)
·
FF02::6
OSPF (DR/BDR)
·
FF02::9
RIPv2
·
FF02::A
EIGRP
Unspecified IPv6
adresa (sve nule)
0000:0000…, odnosno ::/128 i koristi se kao source kod DHCP
requesta
Loopback IPv6
adresa
::1/128
Privatni adresni
prostor
FC00::/7
Dokumentacija
2001:DB8::/32
6 to 4 tunneling
2002::/16, ruter dodaje svoju IPv4 adresu i tako stvara
jedinstvenu IPv6 adresu
Teredo tunneling
2001::/32
Link-Local adrese –
automatski se konfiguriraju na lokalnom linku
FE80::/10
FE80::DD21:D5F0:7AAB:B502%10 – ovaj %10 je ZoneID i koristi
se jer su sve link local ipv6 adrese u istom subnetu na raznim sučeljima pa to
omogućava računalu da zna na koji interface treba slati pakete.
RIPE NCC raspon
adresa
2A00::/12
RIPng
-
Distance i vector protokol
-
Isti mehanizmi za zaštitu od petlje (split
horizon)
-
Maksimalan radijus mreže je 15 usmjernika
-
UDP protokol na portu 521
-
Periodička osvježenja
-
Za osvježenja se koristi multicast adresa FF02::0
putem link-local
OSPFv3
-
Princip rada isti kao OSPFv2
-
Susjedski odnosi uspostavljaju se putem
link-local adresa
-
Osvježenja i dalje idu po LSA paketima
-
Osvježenja se šalju na multicast adrese FF02::5 i
FF02::6
-
Za autentikaciju se koristi IPsec
-
Za routerID se i dalje koristi IPv4 adresa
EIGRP
-
Princip rada ostao isti, DUAL-FSM
-
Za komunikaciju koristi multicast adresu FF02::A
-
Za routerID
se i dalje koristi IPv4 adresa
-
EIGRP se mora eksplicitno uključiti sa NO
SHUTDOWN naredbom pod EIGRP procesom
Općenito routing sa
IPv6
Potrebno ga je uključiti globalno sa naredbom IPV6
UNICAST-ROUTING
IPv6 adrese na R1
181.34.x.1/24 -> svaki oktet treba pretvoriti u HEX zapis
pa je 181 = B5, 34 = 22, 1 = 0101, 1 = 0101
ipv6 add 2002:b522:0101:1::1/64
ipv6 add 2002:b522:0101:2::1/64
isto tako za Lo11 i Lo12 treba upisati adrese
da bi provjerili ping, moramo pingati sa sourceom lo100 ili
lo101 sa ping 99.99.99.1 so lo 2
iBGP
R1
router bgp 1
nei 10.1.1.1 remote 1
nei 10.1.1.1 update lo 0
net 66.1.0.0 mask 255.255.255.0
R2
iBGP
router bgp 1
nei 10.1.0.1 remote 1
nei 10.1.0.1 update lo 0
net 66.1.1.0 mask 255.255.255.0
eBGP
nei 99.99.99.1 remote 444
nei 99.99.99.1 update lo 2
nei 99.99.99.1 ebgp-multihop 2
ip route 99.99.99.1 255.255.255.255 33.33.33.99
da bi ovo radilo, HQ isto mora imati statičku rutu do
12.1.1.1 i konfiguriran BGP prema neighbor 12.1.1.1
Local preference na
200 za mreže lo5 i lo6 na HQ (55.1.0.0 i 55.1.1.0)
R2
Ip access-list standard LP
Permit 55.1.0.0 0.0.1.255
Exit
Route-map MAP_IN
Route-map MAP_IN permit 10
Match ip add LP
Set local-preference 200
Exi
Router bgp 1
Nei 99.99.99.1 route-map MAP_IN in
POTREBNO JE PROPUSTITI OSTALE MREŽE PREMA R2 DA IDU
NORMALNO, a NAKON OVE MAPE NEĆE IĆI
Ip access-list standard FILTER
Permit 77.1.0.0 0.0.255.255 (ovo je iz AS333)
Permit 55.1.0.0 0.0.255.255 (ove mreže moraju proći)
Permit 33.33.33.0 0.0.0.255 (ovo će trebati za ipv6 tunel)
Permit 1.1.2.2 0.0.0.0
Exit
Route-map MAP_IN permit 20
Match ip address FILTER
Exi
Exi
OGLASITI MREŽU IZMEĐU R2 i HQ u BGP ili OSPF
R2
Router bgp 1
Net 33.33.33.0 mask 255.255.255.0
(četvrti zadatak)
KONFIGURIRATI MED
ATRIBUT ZA MREŽE 66.x.1.0 na R1 i R2 i DEFAULT RUTU ZA NEI 99.99.99.1
R2
Router bgp 1
Nei 99.99.99.1 default-originate
Exi
Ip access-list standard MED
Permit 66.1.0.0 0.0.0.255
Permit 66.1.1.0 0.0.0.255
Exi
Route-map MAP_OUT permit 10
Match ip add MED
Set metric 777
Exi
Router bgp 1
Nei 99.99.99.1 route-map MAP_OUT out
(peti zadatak)
KONFIGURIRATI SVE
ŠTO JE POTREBNO ZA RUČNI ipv6 tunel između R2 i HQ
R1 (source loopback
je „ljubičasti“ odnosno 33.33.33.x)
Int tun 0
Ipv6 add 3001::1/112
Ipv6 unicast-routing
Ipv6 eigrp 1
Tunn source lo1
Tunn destinat 33.33.33.99
Tunn mode ipv6ip
Exi
Int lo 11
Ipv6 eigrp 1
Int lo12
Ipv6 eigrp 1
Ipv6 router eigrp 1
No shut
AKO NIJE SLOŽENO, OVO ISTO TREBA NAPRAVITI I SA DRUGE
STRANE NA HQ
Ping 2A02:AAA:99:1::1 so lo 11
Ping 2A02:AAA:99:1::1 so lo 12
(zadatak 6)
KONFIGURIRATI SVE
ŠTO JE POTREBNO DA BI MOGLI KOMUNICIRATI PUTEM AUTOMATSKIH ipv6 TUNELA mogli
KOMUNICIRATI S MREŽAMA lo100 i lo101
R1
Int tun 10
Ipv6 enable
Tunnel source lo10
Tunnel mode ipv6ip 6to4
Exi
Ipv6 route 2002::/16 tunn 10
OBAVEZNO NA R1 OGLASITI MREŽU U BGP
Router bgp 1
Net 181.34.1.0 mask 255.255.255.0
OBAVEZNO PODESITI ACCESS LIST MED TAKO DA PROPUŠTA i OVU
MREŽU
Ip access-list standard IPV6
Permit 181.34.1.0 0.0.0.255
Exi
Route-map MAP_OUT permit 20
Match ip add IPV6
Provjeriti sa
Ping 2002:0101:0202:1::1 so lo 10
(zadatak 7)
Backupirati konfiguraciju na TFTP
R1
Copy running-config tftp
10.50.1.100
R2
Copy run tftp
10.50.1.100
(zadatak 8)
konfigurirati SNMP na usmjerniku 2 tako da imamo nadzor nad svim fizičkim
sučeljima
R2
Conf t
Snmp-server community prtgRO ro
Snmp-server trap-source fa0/0
Snmp-server enable traps
Snmp-server host 10.50.1.100 version 2c prtgRO
End
Wr
ONDA OTIĆI NA PRTG
Add device (dolje)
Odabrati kategoriju
Odrediti adresu (10.1.2.2 ili bilo koju iz subneta)
Community string podesiti na prtgRO
Dodati SNMP senzor
Odabrati interfejse i upaliti kanale
PODESITI UPPER I
LOWER ERROR LIMITE
Kliknuti na Traffic Total -> Limits > enable limits
Upper Error na 90 000
Upper Warning na 80 000
Lower Warningna 10 000
Lower Error na 5 000
ISTO OVO NAPRAVITI
I ZA DRUGI INTERFACE
(zadatak 9)
podesiti netflow
R2
Int f0/1
Ip flow ingress
Ip flow egress
Exi
Ip flow-export source f0/0
Ip flow-export version 5
Ip flow-export destination 10.50.1.100 9996
SADA ODABEREMO TAJ
SENZOR U PRTG
Devices -> R2 -> Add senzor -> Netflow/Jflow version 5
Odabrati UDP 9996 (port)
Active timeout prema potrebi
-----------------------------------------