2011-11-08

Spela in nätverkstrafik på en Virtuell Maskin? Eller: "hur får man info om hur applikationen funkar?" (del 2)

Detta är del2 i en bloggserie om prestandamätning i en XenServer/XenApp miljö.
I del 1 handlade det om en bakgrund kring miljön, och så satte vi upp en ny Virtuell XenApp maskin som skall användas för delar av prestandamätningarna.
Här i del 2 kommer vi att spela in trafiken på nätverket
I del 3 tar vi och analyserar inspelningen

Vi börjar med att ta upp bilden över hur miljön ser ut:
Detta är som sagt en något förenklad bild, men den säger ändå en hel del...
Vad jag vill göra är att göra en inspelning av all nätverkstrafik som går ut från nätverkskortet på min nya virtuella maskin.

Om jag sätter in en sniffer i det fysiska nätet så kan jag spela in all trafik som lämnar XenServer-hosten.(markerat med en röd pil nedan). Men då får jag ju med även annan trafik, till exempel får jag med allting från den andra Virtuella Maskinerna också då.
Denna trafik kan man i och för sig filtrera bort. Men ett annat problem är att om jag sniffar trafiken på den fysiska hosten är att om det sker trafik internt på Hosten så kommer det inte att gå ut genom externa nätverkskortet. Jag kommer alltså inte se den trafiken.

Det är därför jag vill mäta på det virtuella nätverkskortet på XenApp maskinen. (markerat med den gröna pilen nedan)

Så hur gör man det då??
För att göra denna övning behöver vi tre verkyg:
- PuTTY, för att köra SSH mot vår XenServer host och köra våra kommandon.
- WinSCP, för att hämta inspelningarna från XenServer-hosten till vår egna maskin.
- Wireshark, för att analysera inspelningarna och se vad som har hänt.

Först av allt måste vi veta vad VMen heter som vi skall spela in på. I vårt fall säger vi att den heter "XenAppTest1".
Därefter kollar vi att om det finns mer än ett nätverkskort. Antingen så gör man det i XenCenter under "network"-fliken för den aktuella VMen.
Eller så kör man "xe vm-vif-list vm=XenAppTest1"
Här ser vi att maskinen bara har ett nätverkskort vilket underlättar vår felsökning. :)

Den första maskinen man startar upp på en XenServer-host blir domän0 (eller "Dom0"), den andra maskinen blir Domän1 osv..
Genom att skriva "ifconfig" i prompten så får vi upp alla nätverkskort som XenServer-hosten känner till, fysiska och virtuella.
De virtuella nätverkskorten heter "vif[domännummer].[serienummer]". Med andra ord, om vi har en virtuell maskin som har fått domännumret 5 och det bara finns ett nätverkskort så kommer det att heta "vif5.0".
Om den virtuella maskinen har fått domännumret 10 så kommer det första nätverkskortet att heta "vif10.0", det andra nätverkskortet "vif10.1" osv...

För att få fram vilket domännummer vår VM har fått så kör vi kommandot: "xe vm-list params=name-label,dom-id"  (observera att det INTE skall vara nått mellanslag efter kommatecknet före dom-id).
Här kommer det upp en JÄTTElång lista om man har många VMar i miljön eftersom att här kommer alla virtuelal maskiner att listas. Detta oavsett om de igång eller inte.. :)
Så för att minska listan kan vi stället köra kommandot:
xe vm-list params=name-label,dom-id | grep XenAppTest1 -A 2
Då får vi upp bara den maskin vi är intresserade av.

Som jag skrev lite längre upp så får man fram namnen på nätverkskorten med hjälp av "ifconfig", och kör vi det kommandot så hittar vi "vif32.0" där..

Så här är det alltså "vif32.0" som skall avlyssnas och det gör vi med gamla goda tcpdump:
tcpdump -i vif32.0 -vvv -w XenAppTest1_rec1.pcap
I just detta fall så vill jag dela upp mina inspelningar i olika delar. De delar jag vill ha är:
Inspelning1 - från när jag klickar på applikationen i Citrix Webinterface, tills dess att applikationen har startat och jag får upp fönstret.
Inspelning 2 - när jag gör en sökning i applikationen. klickar på första resultatet och får upp det nya resultatfönstret.
Inspelning 3 - När jag klickar på en viss funktion i applikationen och väntar på att få upp ett förhandsgranskningsfönster.

Så för att starta första inspelningen så kör jag kommandot.
När det är igång så startar jag applikationen från webbgränssnittet. Ser hur inloggningen görs, alla script körs och applikationen laddas. När den har laddat klart och jag fått upp allting som skall komma upp trycker jag på CTRL+C för att abryta inspelningen.

Jag forstätter sedan med nästa inspelning, och sedan den sista.
För att inte skriva lver mina inspelningsfiler så ändrar jag så klart i filnamnet mellan varje gång (första inspelningen blir "XenAppTest1_rec1.pcap", den andra blir "XenAppTest1_rec2.pcap" och den tredje blir "XenAppTest1_rec3.pcap".
"-i vif32.0" betyder vilket interface som skall spelas in.
"-vvv" betyder att spara så mycket information som möjligt.
"-w XenAppTest1_rec1.pcap" betyder att resultatet skall skrivas till fil.

Så nu är inspelningarna klara. What's Next?
Nästa steg är att använda WinSCP för att kopiera över inspelningsfilerna till den lokala PCn.
WinSCP är ett tokenkelt verktyg för att i ett grafisk verktyg kopiera filer från en linux/Unix burk som bara tillåter SSH.
Installationen tar typ 20 sekunder. I applikationen matar man in vilken host man vill ansluta mot och skriver in användarnamn och lösenord. Därefter kan man dra och släppa filerna från hosten till sin lokala maskin.

Ok. jag har fått över filerna. nu'ra?
Nu är det dags att analysera filerna i Wireshark.
Men det får bli imorrn. Blir lite väl långt annars. :)

2 kommentarer:

  1. Bra inlägg!

    Men vad är det för skillnad att sniffa trafiken via XenServer-hosten och att göra det inuti den virtuella maskinen i fråga? Förutom att man slipper besudla VM:en med Wireshark så klart, men det var ju ändå bara en kopia av strulmaskinen.

    SvaraRadera
  2. Tack för din kommentar Anders!
    Det är inte enormt stor skillnad. Denna metodik kan dock användas oavsett vilket OS som ligger på VMen, även appliance-maskiner.
    Så att det råkar vara en Windows-burk här var mest för att när jag behövde göra detta så var det en Windows maskin. :)
    //Björn Andersson

    SvaraRadera

Related Posts Plugin for WordPress, Blogger...