23 februari, 2008

Övrigt: Vad står MZ för i EXE-filer

Detta är nog ett av de mest konstigaste inläggen hittills men som kan vara kul att veta för den vetgirige. Det kan räknas som IT-historia? För er som programmerat i DOS i tidiga år känner väl igen formatet i huvudet (headern) för en EXE-fil (en fil i DOS/Windows som är körbar)?

Alla EXE-filer börjar med den hexadecimala koden 4D5A och står för MZ. Detta kan man se om man öppnar en sådan fil i en vanlig textredigerare. Förkortningen MZ står för Mark Zbikowski som jag har hört är en person som programmerade i DOS för länge sedan, och som kom på EXE-formatet!? Har också för mig att han arbetade (eller arbetar fortfarande) för företaget Microsoft men är inte helt 100% säker på detta.

22 februari, 2008

Mjukvara: Konvertera avi till DVD

Följande inlägg handlar om konverting till dvd "convert video to dvd, convert divx to dvd, convert xvid to dvd, convert avi to dvd, convert wmv to dvd".

Jag har hittat ett grymt program för konvertering av video till DVD. Programmet heter ConvertXtoDVD 3 (version 2.99.13.900 RC5 idagsläget) och är till och med på svenska. Men om man vill kan man byta språk enkelt via en meny.

Det finns stöd för otroligt många format och det positiva är att det verkligen fungerar bra jämfört med många andra program av denna typen. Gränssnittet är väl genomtänkt och utvecklarna har även lagt till en handfull användbara funktioner. Min favorit är att datorn stängs av automatiskt när en konvertering är slutförd.

Har man en film som är uppdelad på två eller flera skivor kan man lägga till alla filerna i projektet och sedan kan man välja att slå ihop dem till en enda film. Grymt!

En annan positiv egenskap är att det ingår ett brännarprogram för att bränna ut sitt projekt på en DVD. Allt är helt integrerat i mjukvaran. När projektet är utbränt finns det t.o.m en meny på skivan för val av scener, spela filmen med mera. Menyn kan man ändra manuellt i programmet och man kan även ladda ner nya menyer från webben om man känner för det.

Programmet får 9/10 i betyg för det är verkligen ett riktigt kap. Det får inte maxpoäng bara för att det inte visas någon förhandsgranskning när man lägger till flera videofiler. Det är något jag saknar.

För mer information hänvisar jag till programmets webbsida AVI to DVD Video Converter Software VSO

21 februari, 2008

Övrigt: Blu-ray vinner över HD-DVD

Har Blur-ray vunnit?
I förrgår annonserade Toshiba att de överger HD DVD, och då kan vi ju nästan gissa vilket format som vinner kampen. Detta enligt tidningen Datormagazin i en kort artikel skriven av Mats Andersson.
"Med dagens officiella tillkännagivande från Toshiba är formatkriget över och Blu-ray står som segrare." ~ Mats Andersson, Datormagazin.se
För er som inte vet vad Blu-ray och HD DVD är för något kan jag tala om för er att det är nästa generations DVD skivor för lagring av data på optiska medium. De existerar redan idag och har flyttat gränsen från ynkliga 4,7GB (enkel/dubbel sidigt) till cirka 50GB. De senaste månaderna har fler och fler företag gått över till Blu-ray (även kallat Blålaser på svenska) för att sedan lämna HD DVD till sitt öde.

Toshiba ledde innan övergången till Blu-ray ett konsortium för HD DVD vilket även innefattade elektriska enheter för konsumenter. Men de fortsätter med att utvärdera persondatorer med HD utrustning för att se om de passar in på marknaden. Det var även tänkt att flera filmbolag skulle välja HD men så har inte varit fallet.

Så det verkar som att vi har en segrare!? Jag har kontrollerat flera artiklar på Google och andra nyhetssidor och alla påstår nu att Blu-ray är vinnaren.

Källor
FAQ: HD DVD vs. Blu-ray
Slutet nära för HD DVD-formatet
Toshiba överger HD DVD-formatet

20 februari, 2008

Mjukvara: Microsoft skänker bort mjukvara

Gratis programvara för design och utveckling
Änligen kan studenter som är medlemmar i CSN eller Mecenatkortet få mjukvara ännu billigare - några utvalda programvaror är faktiskt gratis. Microsoft har nämligen beslutat att skänka några av deras toppklass program till studenter för att öka kreativiteten och utvecklingen. Detta hoppas Microsoft ska öka antalet intressanta och nyskapande idéer bland studenter. I det ingår funktioner för design och utveckling av webbsidor eller mjukvara. Detta är heller inte bara för oss här i Sverige utan även internationellt. Det är inte många länder men några stycken i alla fall.

Det är välkänt att Microsoft har pressat priserna på några av deras Office-paket för att underlätta för studenter med låg inkomst och dålig ekonomi för att de ska klara av sina studier samt prestera väl. Efter ett beslut som fattats har därför, att nämna några få, Visual Studio 2008 Professional, Windows Server 2007 Standard, Microsoft Expression Studio med flera släppts för gratis nerladdning för studenter som är medlemmar hos CSN eller Mecenatkortet.

Paketet med programvara går under namnet Microsoft Dreamspark och är tillgängligt från webben efter att man har loggat in med sitt Microsoft Live ID (som student).

Hela listan på programvarorna som igår i Dreamspark
  • Microsoft Visual Studio 2008 Professional edition
  • Microsoft Visual Studio 2005 Professional edition
  • Windows Server 2003 Standard edition
  • Microsoft SQL Server 2005 Developer edition
  • Microsoft Expression Studio
  • (12 månaders utvärdering) XNA Game Studio 2.0
Sedan finns det även andra programvaror som Express Edition
  • Visual C# 2005
  • Visual C++ 2005
  • Visual Basic 2005
  • Microsoft SQL Server 2005
  • Microsoft Visual Web 2005
  • Visual J# 2005
  • Microsoft Virtual PC (ungefär som VMWare)
Så börja designa och utveckla era idéer redan idag för att få kunskaper inom ett område som är enormt och där det är "hyfsat" enkelt att tjäna pengar om man verkligen visar vad man kan och vilka framtidsvisioner man har inom program- och mjukvara.

Denna aktion av Microsoft's Bill Gates är enligt mig mycket bra. De ska bara veta hur många studenter det finns där ute som har kraften och viljan att skapa men som inte har råd. Detta öppnar upp för helt nya portar och förhoppningsvis kommer många studenter mer än gärna dela med sig av sina idéer för att skapa revolutionerande- och framtidens programvara.

Källa:
Mecentat.se
idg.se

19 februari, 2008

Design: Bloggens nya design

I går kväll fixade jag i ordning en ny design för bloggen. Det var först efter ett tips från en av mina vänner som jag bestämde mig för Brownie-liknande färger. Målet med förändringarna var att göra den lite fräschare och mer lättläst. Inspirationen kommer från flera olika webbsidor på Internet och några mallar från Wordpress. Sedan har jag även anpassat innehållet efter bildskärmar med upplösningen 1024x768. Jag tror att de flesta använder den upplösningen och väljer därför den istället för den rekommenderade upplösningen 800x600.

Jag är mycket nöjd med resultatet och om någon av er tycker att det är svårt att läsa materialet och artiklarna på bloggen får ni gärna höra av er.

- Waschman

17 februari, 2008

Nätverk: Lathund för koppling av nätverk

Förord
Detta kommer vara en artikel som uppdateras med tiden tills jag känner att grunderna för koppling av ett nätverk har lärts ut. Eventuella påbyggnader kan komma i framtida artiklar men det är ännu inte bestämt.

Introduktion
Detta är några av grunderna för koppling av ett nätverk. Det kan vara bra att veta för nybörjare och som en referens för de som inte byggt och kopplat ett nätverk under lång tid. I artikeln kommer jag endast gå igenom koppling av Ethernet koppar 100Mbit. För er som inte riktigt har förstått vad detta är för något kan jag tala om att detta används när man ska koppla ihop datorer och annan IT utrustningn till ett nätverk (t.ex Internet) så att enheterna kan kommunicera med varandra med olika protokoll (regler) för hur trafiken får skickas. Ett vanligt exempel är en dator som är kopplad till ett ADSL-modem som sedan dirigerar trafiken ut på Internet. Ett annat exempel är om man ska ha ett LAN-party, även känt som LAN. Där kopplar man ihop mängder med datorer, switchar (och även routrar ibland) för att t.ex spela spel mot varandra.

Vad är ett LAN?
Ett LAN (Local Area Network) är ett lokalt nätverk som används för att kommunicera mellan flera IT enheter. Nätverket rör sig inte i ett stort geografiskt område som Internet (WAN) eller ett stadsnät (MAN) utan endast på en liten plats i en eller flera närliggande byggnader. För att koppla ihop dessa används vanligen kopparkablar som sedan kopplas till en knutpunkt/nav (hub/switch) som kopplar ihop alla enheter till ett nät av värdsystem - datorer.

Typer av kablar
Det finns väldigt många typer av kablar men de jag snabbt ska gå igenom är vanliga kopparkablar som klarar av hastigheterna 10-, 100- och 1000Mbit. Det sistnämnda kan även kallas Gigabit. Inom denna kategorin finns raka (straight-through) och korsade (crossover) kablar som kan användas för olika ändamål.
  • Rak: Tillåter endast kommunikation åt ett håll åt gången och alltså inte samtidigt. Detta kallas för halv-duplex (half-duplex). Det betyder enkelt förklarat att mottagaren måste vänta innan man får sända tillbaks. Med detta kan man uppnå maximal hastighet åt ett håll. För att koppla ihop minst två datorer krävs en knutpunkt/nav (hub/switch/[router]) eller en korsad kabel som nämns här nedanför.
  • Korsad: Kommunikation åt båda riktningarna samtigt skapar full-duplex vilket betyder att man kan koppla två datorer direkt mellan varandra med en enda kabel utan en knutpunkt. I teorin kan man använda 200Mbit totalt: 100Mbit åt vardera riktning.
Varför krävs olika typer av kablar vid olika enheter
I lathunden ni läser just nu tänker jag även gå igenom hur tekniken fungerar för att ni lättare ska förstå sambandet. I Cat5 (och även andra) kablar finns det fyra stycken ihopsurrade koppar-kabel-par men det är bara två av dem som används vid 10/100Mbit för sändning och mottagning av datasignaler med halv-duplex. Med full-duplex används alla fyra kabelparen, med två kabelpar som sköter sändning och två kabelpar som sköter mottagning, vilket skapar en kollisionsfri kommunikationslänk åt båda riktningarna för både sändning och mottagning.

Fyra kabelpar blir totalt åtta stycken olikfärgade "mini-kablar" (jag kommer kalla dessa små kablar för "mini-kablar" i texten framöver för att underlätta läsningen). De är numrerade från 1 - 8. Om man tittar på nätverkskabeln från framsidan och håller klämman uppåt så är pin 1 längst till vänster (brukar vara grön eller orange beroende på vilken standard som används). Vid halv-duplex (rak) används pin 1 och 2 för att sända signaler (TX - Transmit) och pin 3 och 6 för att ta emot signaler (RX - Recieve).

Håll nu tungan rätt i mun och läs långsamt. Försök gärna att rita upp en bild när ni läser texten för att lättare förstå.

Om man vill koppla ihop en dator med en annan dator, med en rak kabel, så uppstår problem eftersom nätverkskorten på båda datorerna har sina pins på samma positioner. När man då ska koppla en rak kabel mellan dem så går de pins (1 och 2) som sänder signalerna från NätverkskortA -> genom kabeln mot -> NätverkskortB och de pins (1 och 2) som nu får emot signalerna kan inte eftersom det är de pins som sänder på den andra datorn. Därför uppstår en krock och signalerna kan bara skickas men ingen vet hur de ska tas emot. Signalerna skulle egentligen ha färdats från nätverkskortA pin 1 och 2 mot pin 3 och 6 i nätverkskortB. NätverkskortB skulle då ta hand om informationen som mottogs och sedan skicka svar (vanligtvis skickas en typ av svar) tillbaka från pin 1 och 2 till nätverkskortA pin 3 och 6. Då hade vi haft en sluten länk och signalerna hade kunnat cirkulera.

Lösningen på problemet är att då använda en korsad kabel, som även medför full-duplex (om alla fyra kabelparen används), som vrider om mini-kablarna så att pin 1 -> pin 3 och pin 2 -> pin 6. Kort sammanfattat så går sändarens pins till motsatta pins hos mottagaren.

Varför används då raka nätverkskablar till en hub/switch?
En switch (mitt val) har funktionalitet som gör att den kan automatiskt känna av om fel typ av kabel används. Eftersom en switch bara vidarebefodrar signaler så räcker det med raka kablar men om man skulle råka använda en korsad så brukar switchen vara så "smart" att den känner igen detta och byter plats på pins dynamiskt eller vad man kan kalla det. Den flyttar inte på pinnarna fysiskt men logiskt i switchen så flyttas de om. Den del som tar hand om detta är en MDI-X krets som man upptäcker genom att leta efter ett markerat X på nätverksporten på switchen. En av termerna för detta är "intern-korsning" eller "internal-crossover" på engelska.

Varför används korsade nätverkskablar vid koppling till en router?
Se routern ungefär som en dator med en eller flera nätverkskort. En avancerad dator med diverse specificerade uppgifter men den vanligaste är att "routa" trafik - bestämma vart signaler skall skickas - alltså till vilka nät. Därför fungerar portarna som ett nätverkskort och om detta kan ni läsa i ett stycke här ovanför där det beskrivs lite mer detaljerat men bara tillräckligt för att ni ska kunna förstå.

Notis: på Wikipedia.org har jag läst att i nyare varianter av nätverkskort så kan de också automatiskt känna igen vilken typ av kabel som används och sedan rätta till problemet därefter. Nackdelen är att båda nätverkskorten måste stödja funktionen.

Kablarna som klarar upp till 100Mbit heter Cat5 eller Cat5e och används vanligen för 100BASE-TX Ethernet. Det finns även specifikationer som stödjer Gigabit men för den högre hastigheten rekommenderas Cat6 som har mycket strikta regler för kablarnas virningar och skydd mot störningar.

När ska man använda de olika typerna

Rak (straight-trough)Korsad (crossover)
Switch till RouterSwitch till Switch
Switch till PC eller serverSwitch till hub
Hub till PC eller serverHub till hub

Router till Router

PC till PC

*Router till PC

Sammanfattat så ska man använda korsade kablar vid lika enhetstyper eller när man kopplar en router till en PC (*). Det sistnämnda är bara viktigt när man kopplar till äldre routrar, eller nätverkskort som inte känner av detta automatiskt. Raka kablar används vid olika enheter.

Adressering
För att kunna identifiera en enhet på ett nätverka används MAC-adresser och/eller IP-adresser. Dessa måste vara unika för att mjuk- och hårdvara ska kunna dirigera om trafiken till rätt destination. Hur man sätter upp ett enkelt dator till dator (en-till-en) nätverk och nätverk med flera datorer och dess adressering kommer jag försöka skriva om i en framtida artikel.

Felsökning
  • Det vanligaste felet i ett nätverk är att kabeln har lossnat. Kontrollera enheten (dator, skrivare, ...) och navet vid andra änden.
  • Har ni precis satt upp ett eget nätverk och enheterna inte kan hittas är den största missen att man har konfigurerat fel IP-adress och/eller subnätmask. De vanligaste inställningarna för detta är IP:192.168.1.x, Subnätmask:255.255.255.0
  • Om allt stämmer men fortfarande inte fungerar så bör ni kontrollera eventuella brandväggar, antivirus, och andra liknande program. Det som rekommenderas för ett LAN för spelande är att avaktivera dessa program tills ni har spelat färdigt.
  • Använder ni en router som gateway måste ni kanske öppna upp vissa portar för att vissa spel och program ska fungera.
Tillägg 9/4-08
Jag har reviderat innehållet lite och ändrat några stavfel. En punkt har lagts till som beskriver varför det krävs olika kabeltyper för diverse enheter. Det är en väldigt informationsrik del.

Källa och referenser
Jag har lärt mig det mesta i kursen CCNA/CCNP som är en typ av Cisco kurs. Cisco är ett stort ledande företag inom nätverksdesign- och teknik. Jag har även läst litegrann på Wikipedia för att se till att min information är så korrekt som möjligt och försökt komma ihåg hur jag gjort när jag byggt ett nätverk. Även fast jag har använt mina egna ord och försökt förklara så gott jag kan så finns det alltid ett annat ställe där det beskrivs mer ingående för de som vill veta mer.

Informationen som anges på Wikipedia ska man ta med en nypa salt men genom att jämföra med sin utbildning och/eller om det man har läst på inom området så kan det vara en utmärkt resurs som kan användas för att felsöka mina egna beskrivningar innan de publiceras.

Intressant läsning anges här nedanför:
Testning av 10Gbps nätverk i Chile (engelska)
Olika typer av nätverks media (engelska)
En uppsats skriven om nätverk (student, svenska)
Wikipedia - Ethernet (svenska)
Wikipedia - LAN (svenska)
Wikipedia - Duplex (svenska) (engelska)

AJAX: Är ajax säkert

Förord
Jag har inte läst på så mycket om AJAX säkerhet men det jag tänker berätta är den mest grundläggande säkerheten som de flesta glömmer bort när de utvecklar en ajax-tjänst.

Introduktion
Detta är min första lilla artikel om säkerheten i AJAX. Det är mycket grundläggande och är till för många av er där ute som inte är så insatta i detta. Personligen har jag själv inte hunnit utveckla så mycket med AJAX men när jag skapade en enkel dynamisk CMS (Content Management System) tjänst lärde jag mig hur jag skulle implementera simpla säkerhetsåtgärder.

Att tänka på
För det första måste ni veta vad AJAX egentligen är och hur det fungerar. Jag kommer inte gå igenom alla detaljer, utom endast det nödvändigaste. AJAX står för Asynchronous Javascript And XML är är ett sätt för en webbsida att kontakta en webbserver i bakgrunden (dolda anrop/request) utan att det märks för besökaren. Webbsidan har t.ex ett Javascript som anropar webbservern och begär information om de senaste inloggade personerna. Webbservern kör PHP och använder MySQL för att hämta informationen som efterfrågas av AJAX. Koden kanske är utvecklad så att den bara visar användare som har samma behörighet för webbsidan som den aktuella besökaren har. Därför skickas besökarens ID med i AJAX anropet och klistras in i SQL-frågan som skickas till databasen med PHP. Sedan skickar PHP ett svar (response) tillbaka med de 10 senaste inloggade användarna på webbsidan. Utvecklaren som har programmerat ihop allt detta tror att koden är säker eftersom det är dolt för användaren så därför har inga säkerhetskontroller implementerats.

Observera att detta bara är ett testscenario!

Hur kan man knäcka detta system
Man kan knäcka systemet enkelt genom att modifiera sitt användar ID med ett enkelt Javascript. Man kan då skicka med "skadlig" kod som sedan klistras in i SQL-frågan tillsammans med användar ID:t och göra en så kallad SQL Injection.

Utvecklaren får sedan ett epostmeddelande från en säkerhetsexpert som har analyserat hans/hennes AJAX tjänst och talar om vilka brister som finns. Utvecklaren tänker inte mer på det utan försöker istället dölja Javascript koden som används i AJAX anropet. Det kan t.ex vara kod som innehåller värden och parametrar som sedan skickas till en specifik adress med GET eller POST.

Utvecklaren tror då att man kan använda webbläsarens referer-värde för att kontrollera att koden kommer från rätt plats. Men detta kan också modifieras av en illasinnad besökare. Istället blir han/hon kontaktad av en person som säger att AJAX fungerar precis som en vanlig besökare som surfar på webbsidan men att det istället görs automatiskt med diverse kommandon som skrivs av utvecklaren. Detta betyder att det inte spelar någon roll (i nuläget) om man använder AJAX eller inte för att göra anrop till webbservern, som annars skulle ha skett med t.ex formulär, klick, knappar, länkar etc.

Säkra tjänsten
För att säkra en AJAX-tjänst måste man även implementera säkerhetskontroller på serversidan. Om man t.ex använder MySQL och PHP kan man säkra SQL-frågan med en funktion som heter mysql_real_escape_string(). Sedan kan man även skapa HASH (Message-Digest) kontroller på datan som skickas och sedan se efter om datan har modifierats.

En annan viktig sak är att endast tillåta tal och siffror om det är det som förväntas - och inget annat.

Sammanfattning
Okej! Så om ni använder AJAX måste ni även se till att ni gör samma säkerhetskontroller som förut, innan ni började använda AJAX för att skicka/ta emot data. Helst görs detta på serversidan men man kan även försöka dölja och kryptera Javascriptet på webbsidan som anropar webbservern så att det är svårare för illasinnade besökare att tyda och förstå kodens logik och funktion. Säkra alltid alla data som skickas till servern.

Webbdesign: Testa webbsidan med olika webbläsare

När man designar en webbsida är det mycket svårt att få den att se ut och fungera likadant i alla webbläsare - i alla fall de vanligaste. Detta involverar Javascript, CSS och liknande hacks. Jag har vetat att det finns tjänster på nätet som kan testa en webbsida med olika virtuella webbläsare, men idag fann jag den bästa tjänsten hittills.

Det är webbtjänsten browsershots som kan användas till att testa dina webbsidor med olika inställningar (java, javascript, skärmstorlek, flash, ...) och det är lite smidigare än om ni själva ska testa fysiskt med olika installerade webbläsare. Testa och se för er själva!

Nätverk: Dynamips, GNS3 Cisco switch

Följande är kort information för de som använder Dynamips eller GNS3 för att skapa virtuella Cisco nätverk hemma med riktiga binärfiler och som försöker använda en switch.

Switchen som går att lägga till är en virtuell sådan och innehåller endast mycket simpel VLAN information. Det går alltså inte att ladda switchen med en IOS Switch binärfil. Istället kan man använda en c3600 router och lägga till en modul vid namn NM-16ESW i en tom "slot". Detta emulerar en switch och klarar VTP, VLAN, Trunkning, ... etc - men inte allt!

För att ändra inställningarna används inte kommandon i läget "global configuration mode" utan i vanlig "privileged exec mode" (#). Där kan ni sedan använda kommandot #vlan database för att ställa in inställningar på switchen (switch-modulen).

Här kommer en länk till forumet för Dynamips där detta förklaras: How to specify an IOS image for a switch

09 februari, 2008

Webbutveckling: Visa användbar information om din webbsida

Jag hittade en bra webbsida i natt som analyserar den webbsida man matar in till skriptet och som sedan visar simpel, användbar information. Det kan t.ex vara hur relevant innehållet är på sidan jämfört med meta-taggarna i head-sektionen, när webbsidan senast cachades, vilka länkar som finns på sidan och lite information om hur man kan optimera webbsidan ännu mer.

Länken till webbsidan som gör analysen finner ni här

Några av er kanske tycker detta är helt onödig information men själv tycker jag att det kan vara användbart ibland att kolla upp detta.

Hack: Firefox 2.0.0.12 osäker?

Enligt webbsidan www.0x000000.com så är senaste patchen för Mozilla Firefox 2.0.0.12, som släpptes för bara några timmar sedan, osäker. Problemet är att man kan få tillgång till webbläsarens alla filer och inställningar via ett simpelt Javascript. För att informera kan jag säga att det vanligtvis är sökvägen "C:\Program Files\Mozilla Firefox" som då blir åtkomlig i en standardinstallation.

Koden finner man under titeln "Firefox vulnerable by default" på deras webbsida som även beskriver hur det är möjligt. Om ni inte vill råka ut för detta kan ni Googla efter "noscript firefox plugin". Om ni inte vill använda tillägget kan ni avaktivera Javascript via menyn "Verktyg->Inställningar->[flik]Innehåll->[kryssa av]Aktivera Javascript" i Firefox.

07 februari, 2008

Windows XP: Snabbstartfältet

Windows XP Tips
Detta är om snabbstartfältet i Windows XP, även kallat Quicklaunch i en engelsk version av Windows XP. Det är det lilla fält längst ner till vänster (under ett normalt skrivbord) bredvid startmenyn. Där ligger som standard tre ikoner för att visa Skrivbordet, Internet Explorer och Windows Media Player. Men men tiden fylls detta fält med en massa skräpikoner som installeras av olika program.

Om du vill hålla rent på skrivbordet men ändå vill ha enkel åtkomst till dina genvägar så är mitt tips till er att lägga dem där istället. Själv har jag kataloger för specifika ändamål som spel, program, Office-program och liknande. Det enda som nu finns kvar på mitt skrivbord är Papperskorgen som inte kan tas bort på vanligt sätt. För att lyckas med det kan man använda ett registerhack eller använda ett tredjepartsprogram.

Sökvägen till snabbstartfältet (om ni vill komma åt katalogen) är följande under en standardinstallation:
C:\Documents and Settings\[ert_kontonamn]\Application Data\Microsoft\Internet Explorer\Quick Launch
Tänk på att katalogen "Application Data" är dold så för att se den måste ni ha ställt in "Visa Dolda Filer och Kataloger" under fliken "Visa" i inställningar för katalogen på menyn "Verktyg". Ni kan även komma åt katalogen genom att högerklicka i snabbstartfältet och välja "Öppna Katalog" (eng. "Open Folder").

Internet: Intressant kunskap #1

Överblick
Netcraft är ett företag/organisation som övervakar webbsidor och övrig statistik för att sedan ge oss information som kan oss lite intressanta kunskaper.

Webbserver topp 5

  • Apache ligger i topp som mest använda webbserver med ca 50% av marknaden.
  • Inte långt efter kommer Microsofts servrar IIS, Windows 2003/2008 server som har runt 35%.
  • Okända servrar innehar ca 7%
  • Google har börjat komma upp i graderna sedan de skapat en egen webbserver för inte så länge sedan. Uppskattat marknadsvärde är 5%.
  • Till sist har vi lighttpd som är ett populärt webbserver paket som är både säkert och flexibelt. Den har ca 1% av marknaden i dagens läge och det är väl mest privatpersoner som utvecklar på fritiden som använder denna server.
Här har vi även ett diagram som är direkt hämtat från news.netcraft.com. Diagrammet visar en översikt över webbserver-marknaden de senaste 13 åren.


Källa: news.netcraft.com 7/2-08

Antal webbsidor i världen som har registrerats
Visste ni att det existerar närmare 156 000 000 webbsidor i världen, och troligen otroligt många fler eftersom jag gissar att de flesta webbsidorna inte har någon statistiksinsamling för företaget som gjort analysen och sedan att det finns många personer som surfar på Internet med cookies och javascript avstängt i webbläsaren. Själv trodde jag att det fanns flera miljarder webbsidor men det kanske är alldeles för många?!
Källa: news.netcraft.com 7/2-08

Italiensk bank hackad - Phishing
Enligt sidan news.netcraft.com så har en Italiensk bank blivit hackad. Det som använts är en så kallad XSS (Cross Site Scripting) som visade en falsk inloggningssida i en iframe (s.k. flytande inline ram). Ramen hade dolts i koden med omkodade tecken så att inga misstankar skulle dyka upp. När man sedan försökte logga in skickades informationen först till en server i Taiwan och sedan till den riktiga bankens webbsida där personen sedan automatiskt blev inloggad.

Vet ni vad det värsta är? När en attack som denna utförs så hjälper det inte att bankens eller någon annan sida är skyddad med ett SSL Certifikat (HTTPS) - nyckellåset i Firefox och Internet Explorer som visar att informationen på webbsidan är säker och skickas i krypterad form. Allt sker bakom kulisserna!
Källa: news.netcraft.com 7/2-08

Förhindra phishing
Om ni vill använda ett smidigt verktyg i er webbläsare som kan förhindra phising webbsidor kan jag tipsa om Netcraft Toolbar. Den finns till både Firefox och Internet Explorer.

05 februari, 2008

PHP/Nätverk: CIDR IP Summarize

För ungefär en månad sedan hjälpe jag någon på ett forum med ett PHP-skript som kan summera IP-adresser med hjälp av CIDR. Det är något som används i många routrar för att minska routing tabellerna och därmed minska belastningen på resurserna i routern vid eventuella beräkningar för olika nätverk. Kort sammanfattat kan man säga att flera nätverk representeras av en enda IP-adress.

Jag lyckades koda ihop en lösning i PHP ganska snabbt men koden har inte optimerats för bästa prestanda och några felhanteringsrutiner finns inte. I framtiden funderar jag på att försöka göra om skriptet till ett lite smidigare. Personen jag hjälpte ville bara ha en lösning och det fick han/eller hon som utlovat.

Kommentarerna och koden är på engelska för att öka tillgängligheten. Det är även enklare att porta koden om någon icke-svensk vill använda den. Jag har försökt kommentera det mesta men märker att det fattas på några ställen; vilka jag tycker är oviktiga för tillfället.

Uppdatering 9/10-08
Koden har fixats till och ger nu ett korrekt resultat. Efter grundlig felsökning kom jag fram till att man fick fel resultat ibland. Jag hade helt enkelt tänkt fel. Men nu fungerar koden som den ska. Nackdelen är dock att den fortfarande är rörig.

<?php
/**
* Filename: cidr-summarize.php
* Owner: Waschman, waschman at gmail dot com, waschman.blogspot.com (swedish)
*/


/**
* Get single IP-address class
*
* @param string $ip
*/
function get_ip_class($ip)
{
$class = false;
$octet = explode('.', $ip);
if ($octet[0] <= 126) $class = 'A';
elseif ($octet[0] == 127) $class = 'Loopback';
elseif ($octet[0] <= 191) $class = 'B';
elseif ($octet[0] <= 223) $class = 'C';
elseif ($octet[0] <= 239) $class = 'Multicast';
else $class = 'Reserved';
return $class;
}


/**
* Decimal to network binary, preceeded with 0
*
* @param int $dec
* @return string
*/
function dec2netbin($dec)
{
$ip = str_pad((string)(decbin($dec)), 8, "0", STR_PAD_LEFT);
return $ip;
}


/**
* This returns 1 if both variables are 0 and 0 or 1 and 1.
* Regular binary AND returns 1 if both only are 1 and 1.
*
* OBS! Don't work on numbers, only a single 0 and 1!
*
* @param bit $a
* @param bit $b
* @return string (0 or 1)
*/
function special_binary_and($a, $b)
{
if ($a == $b) return '1'; else return '0';
//return $a & $b;
}


/**
* Summarizes IP-addresses into a single CIDR address with mask-suffix.
*
* IMPORTANT NOTE: This function needs to be optimized and cleaned. Correct
* error-checking should also be implemented. Code not for use in critical
* computer environments. Also note that all functions included in this package
* is required, except for the get_ip_class() function.
*
* @author Waschman, waschman at gmail dot com, waschman.blogspot.com (swedish)
* @copyright Free for everyone to use, but only if you keep author and copyright information intact.
* @version 0.8.0
* @param array $ip
* @param bool $debugon
* @return array
*/
function cidrsummarize($ips, $debugon=false)
{
//
// Code should be cleaned and optimized.
//

$count = count($ips);
$octet_diff = 0;
// Save all octets into an array
for ($pos=0; $pos<4; $pos++) {
for ($i=0; $i<$count; $i++) {
$octets[$i] = explode('.', $ips[$i], 4);
// Save first octet so we can check which octet differs from
// the others. Crucial when we want to know where to begin
// checking of binary digits.
if ($i==0)
{
$first_ip = $octets[$i][$pos];
echo $debugon?'<p>$firstip:'. $first_ip .'</p>':'';
continue;
}
// Find different octets
echo $debugon?'<p>IS '. $first_ip .' == '.
$octets[$i][$pos] .'? ':'';
if ($first_ip != $octets[$i][$pos]) {
echo $debugon?'no, that means we found an octet that is
different.</p>':'';
echo $debugon?'Debug: Position of octet that
differs is '. $i .':'. $pos:'';
$octet_diff = $pos;// Save position that is different
break 2;// Exit 2 for-loops
}
echo $debugon?'yes</p>':'';
}
}


//
// Set the number of bits so far to use as mask.
// This depends on which octet that differ.
//
$mask_bits = 0;
if ($octet_diff < 1) $mask_bits = 0;
elseif ($octet_diff < 2) $mask_bits = 8;
elseif ($octet_diff < 3) $mask_bits = 16;
else $mask_bits = 24;

//
// Starting main-loop for checking diffing bits.
//
$count = count($octets);
if ($debugon) print_r($octets);
for ($i=$octet_diff; $i<4; $i++) {
if ($i==$octet_diff)
{
$first_octet = $octets[0][$i];
}

// Go through the bits one by one in the diffing octet
$bit_index_all_ones = 0;
$final_octet = '';
for ($bit_pos=0; $bit_pos<8; $bit_pos++) {

echo $debugon?'<h2>Debug: '. $bit_pos .'</h2>':'';
for ($j=0; $j<$count; $j++) {
if ($j==0)
{
//continue;
}
else
{
//$next_octet = $octets[$j][$i];
}
$next_octet = $octets[$j][$i];

echo $debugon?'<p>Debug: First octet='. $first_octet
.', next octet='. $next_octet .'</p>'."\n":'';

// ANDing bits!
$a = dec2netbin($first_octet);
$b = dec2netbin($next_octet);
$anding = $a[$bit_pos] & $b[$bit_pos];

// When equal-bit becomes 0 then there's no more bits that are the same
$equal_bit = special_binary_and($a[$bit_pos], $b[$bit_pos]);

echo "BIT: $bit_pos\tAND: $anding\t";
echo "F: $first_octet\tN: $next_octet\n";

// Create the new octet
if ($equal_bit == 1 && $j == $count-1)
{
$final_octet .= $anding;
}

// No more matches... now we have the bits for the mask
if ($equal_bit == 0)
{
$add_mask_bits = $bit_pos;// create the mask
$final_octet = str_pad($final_octet, 8, '0', STR_PAD_RIGHT);
$cidr_octet = bindec($final_octet);
echo "<pre>\n\n\tFinal octet = $final_octet\n\tCIDR octet = $cidr_octet\n";
echo "\tBitmask: /". ($mask_bits + $add_mask_bits) ."\n\n</pre>";
break 3;// exit 3 for-loops
}

}// EndFor $j

}// EndFor $bit_pos
}

//
// Create the real cidr ip address from the information gathered
//
$cidr_ip = '';
for ($octet_idx=0; $octet_idx<4; $octet_idx++) {
if ($octet_idx==$octet_diff)
{
$cidr_ip .= $cidr_octet .'.';
}
elseif ($octet_idx > $octet_diff)
{
$cidr_ip .= 0 .'.';
}
else
{
$cidr_ip .= $octets[0][$octet_idx] .'.';
}
}

// Cut off trailing dot
$cidr_ip = substr($cidr_ip, 0, -1);


//
// Create the /bits mask
//
$mask_bits += $add_mask_bits;


//
// Create the binary mask
//
$mask_binary = '';
for ($i=1; $i<=32; $i++) {
if ($i <= $mask_bits)
{
if ($i % 8 == 0)
$mask_binary .= '1.';//add dot
else
$mask_binary .= '1';
}
else
{
if ($i % 8 == 0)
$mask_binary .= '0.';//add dot
else
$mask_binary .= '0';
}
}

// Cut off trailing dot
$mask_binary = substr($mask_binary, 0, -1);


//
// Create the dotted decimal mask
//
$mask_decimal_parts = explode('.', $mask_binary, 4);
$mask_dotted_decimal = bindec($mask_decimal_parts[0]) .'.';
$mask_dotted_decimal .= bindec($mask_decimal_parts[1]) .'.';
$mask_dotted_decimal .= bindec($mask_decimal_parts[2]) .'.';
$mask_dotted_decimal .= bindec($mask_decimal_parts[3]);


echo $debugon?'<p>Debug: Mask bits is: /'. $mask_bits .'<br>
IP-address is: '. $cidr_ip .'<br>
Subnetmask is: '. $mask_dotted_decimal .'<br>
Subnetmask in binary is: '. $mask_binary .'</p>':'';

$return_array['cidr_ip'] = $cidr_ip;
$return_array['mask_bits'] = $mask_bits;
$return_array['mask_dotted_decimal'] = $mask_dotted_decimal;
$return_array['mask_binary'] = $mask_binary;

return $return_array;
}


// *** Remove the comments from one of the blocks to test the summarization. ***


// My example :: Should summarize into 192.168.0.0/20
/*$ip[] = '192.168.1.0';
$ip[] = '192.168.2.0';
$ip[] = '192.168.3.0';
$ip[] = '192.168.4.0';
$ip[] = '192.168.5.0';
$ip[] = '192.168.6.0';
$ip[] = '192.168.7.0';
$ip[] = '192.168.8.0';
$ip[] = '192.168.9.0';
$ip[] = '192.168.10.0';*/

// My example :: Should summarize into 128.0.0.0/1
/*$ip[] = '191.168.4.0';
$ip[] = '192.168.5.0';
$ip[] = '193.168.6.0';
$ip[] = '194.168.7.0';*/

// Example addresses from your submitted examples - 82.205.128.0/17
/*$ip[] = '82.205.190.0';
$ip[] = '82.205.192.0';
$ip[] = '82.205.202.0';
$ip[] = '82.205.204.0';
$ip[] = '82.205.246.0';*/

// Example 203.88.64.0/19
/*$ip[] = '203.88.66.64';
$ip[] = '203.88.66.160';
$ip[] = '203.88.82.240';
$ip[] = '203.88.88.24';
$ip[] = '203.88.88.32';
$ip[] = '203.88.88.40';
$ip[] = '203.88.88.160';
$ip[] = '203.88.88.224';*/

// 217.0.0.0/8
/*$ip[] = '217.10.167.0';
$ip[] = '217.195.144.24';
$ip[] = '217.195.144.32';*/

// Example from CCNA3 v311
// Module 1.1.5 (Route Summarization #2)
//
// => 200.199.48.0/20
// Reality: 200.199.48.0/20
//
$ip[] = '200.199.48.0';
$ip[] = '200.199.52.0';
$ip[] = '200.199.56.0';




// Return an array with information about the summarization.
// You can use this in the URL if you want debugging: [this-file].php?debug=1
$use_debugging = (isset($_GET['debug'])) ? $_GET['debug'] : false;
$cidr_ip = cidrsummarize($ip, $use_debugging);
$buf = '';
$buf .= '<hr><p>Summarized IP-address: '. $cidr_ip['cidr_ip'] .'/'. $cidr_ip['mask_bits'] .'</p>';

$buf .= '<pre>';
foreach ($cidr_ip as $value) {
$buf .= $value .'<br/>'."\n";
}
$buf .= '</pre>';
file_put_contents('results.html', $buf);
?>

Mycke nöje och jag hoppas att koden är användbar för i alla fall några av er.

Välkomna till bloggen

Välkomna ska ni vara kära besökare. Jag skriver om IT för att det är kul och för att jag vill dela med mig av information och kunskap. Jag försöker hålla bloggen så kategoriserad som möjligt för att ni enklare ska hitta intressanta länkar och artiklar.