Skip to content

Margus Roo –

If you're inventing and pioneering, you have to be willing to be misunderstood for long periods of time

  • Cloudbreak Autoscale fix
  • Endast

Category: Linux

Algaja Cee progeja lõbud

Posted on June 15, 2009 - June 17, 2009 by margusja

Mõtlesin et värskendan oma väheseid Cee teadmisi läbi kasuliku. Kirjutan sellise pisikese poomise mängu. Alustan siis tasapisi basic asjadest.


#include

#define INPUTTEXT "Sisesta täht nr "
#define TRIES 3

main () {
char a[10];
char b;
int count = 0;

while (TRIES > count) {
printf( INPUTTEXT "%d :\n", count );
scanf( "%s", b);
a[count] = b;
++count;
}

return 0;
}

Hetkel on siis tulemus selline:
[10:43:31 margusja@Irack:~/Documents/poomine ] $ gcc poomine.c -o poomine
[10:43:33 margusja@Irack:~/Documents/poomine ] $ ./poomine
Sisesta täht nr 0 :
a
Segmentation fault
[10:43:36 margusja@Irack:~/Documents/poomine ] $ gd
gdb gdiffmk gdk-pixbuf-csource gdk-pixbuf-query-loaders gdlib-config
[10:43:36 margusja@Irack:~/Documents/poomine ] $ gd
gdb gdiffmk gdk-pixbuf-csource gdk-pixbuf-query-loaders gdlib-config
[10:43:36 margusja@Irack:~/Documents/poomine ] $ gdb ./poomine
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-apple-darwin”…Reading symbols for shared libraries … done

(gdb) run
Starting program: /Users/margusja/Documents/poomine/poomine
Reading symbols for shared libraries ++. done
Sisesta täht nr 0 :
a

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0xffffffbf
0x96d97fc1 in __svfscanf_l ()
(gdb)

Nii uus katse ehk on string tüüpidega mingi jama:

#include

#define INPUTTEXT "Sisesta täht nr "
#define TRIES 3

main () {
long a[10];
int b;
int count = 0;

while (TRIES > count) {
printf( INPUTTEXT "%d :\n", count );
scanf( "%d", b);
a[count] = b;
++count;
}

[08:55:03 margusja@Irack:~/Documents/poomine ] $ gdb poomine
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-apple-darwin”…Reading symbols for shared libraries … done

(gdb) run
Starting program: /Users/margusja/Documents/poomine/poomine
Reading symbols for shared libraries ++. done
Sisesta täht nr 0 :
1
Sisesta täht nr 1 :
2
Sisesta täht nr 2 :
3

Program exited normally.
(gdb)
(gdb) quit

return 0;
}

NB! kui gdb kasu ootate siis kompileerida -g võtmega.

Hetkel käitub minu programm mitte just nii nagu mina soovin. Nagu altpoolt näha on ei oodata täht nr 1’te.
[10:59:29 margusja@Irack:~/Documents/poomine ] $ ./poomine
Sisesta täht nr 0 :
a
Sisesta täht nr 1 :
Sisesta täht nr 2 :
b
Sisesta täht nr 0 – (null):
Sisesta täht nr 1 – (null):
Sisesta täht nr 2 – (null):

Siinkohal tuleb appi gdb:

[11:01:52 margusja@Irack:~/Documents/poomine ] $ gdb ./poomine
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-apple-darwin”…Reading symbols for shared libraries … done

(gdb) l 10
5
6 main () {
7 char a[10];
8 char b;
9 int count = 0;
10
11 while (TRIES > count) {
12 printf( INPUTTEXT “%d :\n”, count );
13 b = getchar();
14 ++count;
(gdb)
15 }
16
17 count = 0;
18 while (TRIES > count) {
19 printf( INPUTTEXT “%d – %s:\n”, count, a[count] );
20 ++count;
21 }
22
23
24 return 0;
(gdb) b 14
Breakpoint 1 at 0x1f7d: file poomine.c, line 14.
(gdb) run
Starting program: /Users/margusja/Documents/poomine/poomine
Reading symbols for shared libraries ++. done
Sisesta täht nr 0 :
a

Breakpoint 1, main () at poomine.c:14
14 ++count;
(gdb) disp b
1: b = 97 ‘a’
(gdb) continue
Continuing.
Sisesta täht nr 1 :

Breakpoint 1, main () at poomine.c:14
14 ++count;
1: b = 10 ‘\n’
(gdb) continue
Continuing.
Sisesta täht nr 2 :
b

Breakpoint 1, main () at poomine.c:14

Nagu näha on satub nr 1 sloti \n ehk reavahetus.
14 ++count;
1: b = 98 ‘b’

—
Seega tuleb reavahetusest lahti saada. See on stringi sisestamises üks väga levinud probleem.

[22:43:54 margusja@Irack:~/Documents/poomine ] $ gdb ./poomine
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show warranty” for details.
This GDB was configured as “i386-apple-darwin”…Reading symbols for shared libraries … done

(gdb) l
1 #include
2 #include
3
4 #define INPUTTEXT “Sisesta täht nr ”
5 #define TRIES 3
6
7 main () {
8 char a[10];
9 char b[20];
10 int count = 0;
(gdb)
11
12 while (TRIES > count) {
13 printf( INPUTTEXT “%d :\n”, count );
14 fgets (b, sizeof b, stdin );
15 char *newline = strchr(b, ‘\n’);
16 *newline = ‘\0’;
17 a[count] = b[0];
18 ++count;
19 }
20
(gdb)
21 printf(“%s:\n”,a );
22
23 return 0;
24 }
(gdb)
(gdb) b 18
Breakpoint 1 at 0x1fb5: file poomine.c, line 18.
(gdb) run
Starting program: /Users/margusja/Documents/poomine/poomine
Reading symbols for shared libraries ++. done
Sisesta täht nr 0 :
a

Breakpoint 1, main () at poomine.c:18
18 ++count;
(gdb) disp b[0]
Invalid character ‘?’ in expression.
(gdb) disp b[0]
1: b[0] = 97 ‘a’
(gdb) disp a[0]
2: a[0] = 97 ‘a’
(gdb) cont
Continuing.
Sisesta täht nr 1 :
b

Breakpoint 1, main () at poomine.c:18
18 ++count;
2: a[0] = 97 ‘a’
1: b[0] = 98 ‘b’
(gdb) disp a[1]
3: a[1] = 98 ‘b’
(gdb) cont
Continuing.
Sisesta täht nr 2 :
c

Breakpoint 1, main () at poomine.c:18
18 ++count;
3: a[1] = 98 ‘b’
2: a[0] = 97 ‘a’
1: b[0] = 99 ‘c’
(gdb) disp a]
A syntax error in expression, near `]’.
(gdb) disp a[2]
4: a[2] = 99 ‘c’
(gdb) cont
Continuing.
abc:

Program exited normally.
(gdb)

Posted in LinuxLeave a comment

netcat

Posted on May 12, 2009 - January 31, 2013 by margusja

Fantastiliselt lõbus tööriist. Sellega võib tunde mängida. Samas on ka asendamatu turva ja võrguliikluse testimisel.

Paar pilti minu lõbutsemisest.

netcat_listen

netcat_send

Posted in LinuxLeave a comment

LFS and SSHD

Posted on April 21, 2009 - April 22, 2009 by margusja

Minu LFS maailmas on uus samm. Mu hädine linuxi pojake omab oskust kuulata sshd porti. Mida kõike head see endas kaasab? Eelkõige seda, et ma ei pea enam mingi parallels konsooli peal sodima. Saan oma lemmiks SSH kliendiga teha oma LFS masinasse sshd.

lfs-sshd1

Posted in LinuxLeave a comment

Linux from scratch and network

Posted on April 6, 2009 - April 12, 2009 by margusja

Nii… Linux meil on aga mis on linux ilma võrguta!?

Ei saagi. Konfitud. Jube raske on ikka põlisel RedHat/Fedora tordinäpul suht nuditud linuxi võrku konfida. Aga noh, tehtud sai.

Posted in LinuxLeave a comment

Kernel panic – Samm edasi – I am IN!!!

Posted on March 12, 2009 - March 23, 2009 by margusja

Enamus teavad mida see tähendab – enamasti halba. Mina avastasin esimest korda elus kui suurt rahuldust mulle see teade pakkus.
Olin mitmeid õhtuid kulutanud sellele, et ehitada ühele välisele kõvakettale päris oma linux. Mitte kasutada mõnda valmisolevat distributsiooni. Iga väiksemgi pakk sai ise kokku kompileeritud ja lingitud.

Ja kui siis pistsin selle ketta Krissu läpaka taha ja grub andis menüü ning alustas kerneli laadimist, mis lõppes – Kernel panic teatega, tundsin et olen väga rahul!

Mitmeid õhtuid kulutades lugemisele kuidas kernelit kompileerida tehtud mitmeid init ram diske. Grubi edas ja tagurpidi kompileeritud kord sinna ja tänna ja tulemus on juba parem 🙂

lfs-screenlfs-screen2

Posted in LinuxLeave a comment

PostgreSQL replitseerimine

Posted on February 13, 2009 - February 15, 2009 by margusja

Posted in LinuxLeave a comment

SYN flooding and SYN spoofing

Posted on January 22, 2009 - January 23, 2009 by margusja

SYN flooding on üks DoS rünnaku tüüp. Rünnatavale serverile tekitatakse väga palju ühendusi SYN RECEIVED staatusega kuni backlog on üle ujutatud. SYN RECEIVED staatus rünnatava serveri connection listi tekitatakse kui rünnatav server saab paketi SYN aktiivse lipuga. SYN flooding rünnaku puhul saadetakse rünnatavale masinale SYN lipuga pakett ning rünnatav masin avab n.n half-open connection. Samuti pannakse half-open connection backlog-i. Rünnatav masin saadab nüüd vastu SYN+ACK paketi ja kui see vastuseta siis üritab saata veel. Kõik see on liiklus ja avatud ühendused ja kasutatud mälu. Samuti on backlog piirangud. Näiteks RedHat 7.3 puhul 256 ja kui ründajal õneestub need täis lasta ning seda situatsiooni mõnda aega hoida on see rünne juba õnnestunud.

Juhul kui veel paketi sees source IP valetada (SYN spoofing attack) siis on rünne veel tõhusam kuna rünnatav masin ei suuda saada SRC masinast SYN+ACK lipuga paketi ning paneb ühenduse backlog-i ning proovib veel ja veel.

Kuidas aru saada et teie serverit on tabanud kas SYN flooding või SYN spoofing?

Lihtsalt netstat ja vaadata palju on SYN_RECV staatuses ühendusi.

# netstat | grep SYN_RECV

Backlog on mälus olev osa kus hoitakse pakete SYN lipuga kuni nad on n.n “three-way handshake (SYN -> SYN+ACK <- SYN+ACK)" protsessi lõpetanud. Mida saab sellisel puhul teha. SYN cookies protection: Hea oleks vaadata kas /proc/sys/net/ipv4/tcp_syncookies oleks 1. Eelnevalt peab olema muidugi kernelisse CONFIG_SYNCOOKIES kompileeritud Vahel võib olla vajadus muuta backlog suurust. Vaikimisi suurust näeb:
# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
1024

tcp_synack_retries - Kui serverisse tuleb SYN lipuga pakk siis saadetakse see SRC poole tagasi SYN+ACK ning pannakse see n.n "half-open" ühendus backlog-i. Juhul kui on tegu SYN flood+spoof ründega ei tule SRC poolt ilmselt tagasi midagi ning backlog uputatakse üle. Sellistel puhkudel on mõtekas piirata hulka mitu korda üritatakse SRC-ga ühendust saada.

Hetkeolukorda näeb:

# cat /proc/sys/net/ipv4/tcp_syn_retries

Minul on ta hetkel 5 mis tähendab et half-open connection hoitakse üleval 3 minutit.

Posted in LinuxLeave a comment

TCP versus UDP

Posted on January 21, 2009 by margusja

TCP – Transmission Control Protocol. Seda võiks võrrelda telefoni kõnega. Sa helistad kellelegi. Vastuvõtja võtab toru ja sa oled suht kindel et sinu kõne jõuab talle kohale. Peale kõne lõpetamist panete te mõlemad toru hargile. Juhul kui veel midagi rääkida siis helistate uuesti ja loote uue ühenduse. Hea on TCP puhul et paketid jõuavad kindlalt saajani. Halb on see et suht koormav meetod kuna koguaeg luuakse ühendusi, suletakse ning monitooritakse.

UDP – User Datagram Protocol. Seda võiks võrrelda n.n tigumailiga. Paned oma paberkirja postkasti aadressiga ja loodad et see läheb kohale. Hea on see et vähem koormav viis kui TCP kuid nagu ka eesti post, kaovad ka UDC puhul paketid rohkem. UDP puhul siis ei võeta saajaga otse ühendust vaid saadetakse pakettid võrgu peale kust nad siis peaks saajani jõudma.

Posted in LinuxLeave a comment

Fail descriptorid ehk fd

Posted on January 20, 2009 - January 21, 2009 by margusja

File descriptorid on failid ja soketid mis on avatud ühe protsessi kohta.

Võtame näiteks veebiserveris:

# pidof httpd

Valime sealt ühe ja vaatame siis palju selle protsessiga on seotud avatud faile. Seda saab teha kahel viisil:

# lsof -p [pid]

OR

ls -lah /proc/[pid]/fd/

Muide /proc/[pid] kataloogis on veel palju huvitavat

Mõnes olukorras on tarvis muuta maksimaalset fd arvu. Hetkel maksimaalselt lubatud fd arvu näeb:

# cat /proc/sys/fs/file-max

Ning muuta saab seda:

# # sysctl -w fs.file-max=100000

Posted in LinuxLeave a comment

diff ja patch

Posted on January 13, 2009 by margusja

Loome failid pakk1.txt sisuga:
rida1
rida2

ja faili pakk2.txt sisuga:
rida1
rida2
rida3


$ diff -u pakk1.txt pakk2.txt > pakk.patch

pakk.patch sisu peak olema:

--- pakk1.txt 2009-01-13 08:35:39.000000000 +0200
+++ pakk2.txt 2009-01-13 08:36:02.000000000 +0200
@@ -1,2 +1,3 @@
rida1
-rida2
\ No newline at end of file
+rida2
+rida3

patchime pakk1.txt faili:

[08:39:24 margusja@Irack:~ ] $ patch pakk1.txt < pakk.patch patching file pakk1.txt

Faili pakk1.txt sisu peaks olema:
rida1
rida2
rida3

Posted in LinuxLeave a comment

Posts navigation

Older posts
Newer posts

The Master

Categories

  • Apache
  • Apple
  • Assembler
  • Audi
  • BigData
  • BMW
  • C
  • Elektroonika
  • Fun
  • Hadoop
  • help
  • Infotehnoloogia koolis
  • IOT
  • IT
  • IT eetilised
  • Java
  • Langevarjundus
  • Lapsed
  • lastekodu
  • Linux
  • M-401
  • Mac
  • Machine Learning
  • Matemaatika
  • Math
  • MSP430
  • Muusika
  • neo4j
  • openCL
  • Õpetaja identiteet ja tegevusvõimekus
  • oracle
  • PHP
  • PostgreSql
  • ProM
  • R
  • Turvalisus
  • Varia
  • Windows
Proudly powered by WordPress | Theme: micro, developed by DevriX.