w133
тσ яєαℓιz&#
[İçindekiler]
1-Giriş
2-genel bilgiler
3-paketler
4-injection yapısız ve calısması
5-paket enjekte etmek
1-Giriş
Bu doküman ile özel teknik yardımıyla bütün ağ trafiğini ve yeni paketleri bulmak mümkündür. Basit C dili gereklidir.
2-genel bilgiler
internetin çalışma katman esasına dayanarak bilgisayarın ne zaman olduğuna ve birinci veri ile ikinci veri bağlantı geçişinden önce diğer protokol katmanlarının yapacağı kısmın çalışması.
internetteki katmanları üç tiptir:
a) taşıma katmanı
Bu katman gonderilen bir verileri alır ve birçok kücük katmana boler, TCP transfer kontrol protokolü ve UDP kullanıcı protokolleri kullanır.
b) internet katmanı
Bu katman tum host a tek bir belirleyici verir ve tum paketleri kaynak hosttan duzenler. Tam bir guvenli veri aktarımı gercekleştiremez. Ve bu kataman protokol çeşitlerinden IP ( Internet Protokolu ) yi kullanır.
c) bağlantı katmanı
Bu katmana bağlı olarak çeşitli donanım ile çeşitli bağlantı tipleri:
BBE,IEEE 802,X.25,PPP,SLIP ve IP protokolleri.
3-paketler
paket olusturmanın bir çok zor tekniği vardır.
temel yapısız bir paket ornegi :
+---------------------------------+
| ethernet başlığı | ana paket |
+---------------------------------+
İlk blok paket kaynagını tespit etmek için kullanılır; ilk blogun bitişi e (Ethernet başlıgının bitisi) karakteri ile gosterilir.
TCP/IP ana paketinin basit yapısı aşagıdaki gibidir :
+----------------------------+
| IP datagram | TCP paketi |
+----------------------------+
TCP paketi baska bloklarada bolunmustur.
Sonuc olarak TCP paketi aşagıdaki formdadır :
+--------------------------------------------------------------+
| Ethernet başlığı | IP datagram | TCP başlığı | TCP verisi |
+--------------------------------------------------------------+
Eger TCP paketi olusturmak istiyorsak, paket baslıgı ve ana TCP paketi lazımdır.
Diger paketler için, örnegin ARP, içinde aynıdır ( sonra Ethernet baslıgı ve ana ARP paketi )
4-injection yapısız ve calısması
Paket injector ikiye bolunmustur;
[1]ağ
[2]konsol
birinci kısım ağ trafiğini ve bütün yakalanan paketler ; Bu yüzden injector tum paketleri tanımayı dener ( tipini, kaynağını, hedefini, protokolünü) ve ekrana yazar.
İkinci kısım kullanıcıya injector ile etkileşimi sağlayabilir ve filtre listesini paket sniff için ayarlar
Paket injector bir cok yolla paketleri filtreleyebilir ;
[1]paketlerin tipleri
[2]paketlerin tipi birbirine etki eden IP Datagram
[3]kaynak IP
[4]hedef IP
[5]kaynak port
[6]heder port
5- paket injecting
Paket injecting ile paket yapımı ve ağ uzerinden yollanması mumkun olmaktadır.
Paket injector bir dizi kolay kod kullanmaktadır, örnegin eger bizim paketimizin adı "test.pkt" ise, programın girişi soyle olmadır :
set infile test.pkt <-- hangi paketin inject olacanıgı belirler
do inject <-- paketi inject etmek için emri verir
Bu sadece cok basit bir ornekti, fakat injector baska parametrelerede ihtiyaç duyar, örnegin kaynak ve hedef Ethernet adresi gibi .. :
setmyeth aa:aa:aa:aa:aa:aa <- Kaynak ethernet adresini aa:aa:aa:aa:aa:aa olarak ayarlar
setethto bb:bb:bb:bb:bb:bb <- Hedef ethernet adresini bb:bb:bb:bb:bb:bb larak ayarlar
set filleth x <- filleth i x olarak ayarlar( x bir sayı )
set fillethto x <- fillethto i x larak ayarlar( x bir sayı )
set infile test.pkt <-- hangi paketin inject olacanıgı belirler
do inject <-- paketi inject etmek için emri verir
Bunlar haricinde baska fonksiyonlar vardır fakat bunlar kadar onemli degildir.
Paket injector 3 temel fonkisyona sahiptir :
+-----------------+ +------------------+ +------------------------+
| Packet sniffer | -> | Packet injector | -> | Packet sınıflandırma |
+-----------------+ +------------------+ +------------------------+
aşağıdaki kod, paket injection için, Libnet kullanarak yazılmıstır.
packetsinjector.c
#include <libnet.h>
int main(void) {
int network; /* ’’ağ dönüşümü’’tarafından ve kullanılan paketleri ne zaman yazacağı ve ne zman kapatacağı */
int packet_size; /* ’’paket boyutu’’kullanılan bellek yığını ve paketi ne zaman yazacağı tartışılır. */
int n; /* gonderilen byte */
u_char *packet; /* paket */
u_long src_ip, dst_ip;
u_short src_port, dst_port;
src_ip = libnet_name_resolve("192.168.9.17", LIBNET_RESOLVE); /* Adresleme duzenleniyor */
if (!src_ip)
libnet_error(LIBNET_ERR_FATAL, "Bad destination IP ");
src_port = 5000;
dst_ip = libnet_name_resolve("213.93.39.87", LIBNET_RESOLVE);
if (!dst_ip)
libnet_error(LIBNET_ERR_FATAL, "Bad src IP ");
dst_port = 80;
packet_size = LIBNET_IPV4_H + LIBNET_TCP_H; /* paket boyutunu yanlızca tanımlayarak TCP ve IP başlığını..kullanarak */
libnet_init_packet (packet_size, &packet); /* Ayrı bellek */
if (!packet)
libnet_error(LIBNET_ERR_FATAL, "libnet_init_packet failed ");
network = libnet_open_raw_sock (IPPROTO_RAW); /* açık ağ arabirimi */
if (network == -1)
libnet_error(LIBNET_ERR_FATAL, "Cannot open network interface "); /* paket yapı arabirim */
libnet_build_ip (LIBNET_TCP_H, /* boyut */
IPTOS_LOWDELAY,
242, /* IPID */
0, /* Ayrılmama */
48, /* Bulunma zamnı */
IPPROTO_TCP, /* Protokol */
src_ip, /* Kaynak IP address */
dst_ip, /* Hedef IP address */
NULL, /* Payload */
0, /* payload uzunlugu */
packet); /* paket hafıza baslıgı */
/* paket yapısı */
libnet_build_tcp (src_port, /* kaynak TCP port */
dst_port, /* hedef TCP Port */
0xa1d95, /* islem numarası */
0x53, /* Ack numarası */
TH_SYN, /* SYN flag ının ayarlanması */
1024, /* Pencere boyutu */
0, /* Acil kapalı */
NULL, /* Payload */
0, /* Payload uzunlugu */
packet + LIBNET_IPV4_H); /* packet hafıza başlığı */
if (libnet_do_checksum(packet, IPPROTO_TCP, LIBNET_TCP_H) == -1) /* Checksum */
libnet_error(LIBNET_ERR_FATAL, "libnet_do_checksum failed ");
n = libnet_write_ip (network, packet, packet_size); /* INJECTION */
if (n < packet_size)
libnet_error(LN_ERR_WARNING, "libnet_write_ip only wrote %d bytes ", n);
else
printf("Construction and injection completed, wrote all %d bytes ", n);
if (libnet_close_raw_sock(network) == -1) /* Temizlik */ libnet_error(LN_ERR_WARNING, "libnet_close_raw_sock couldn’t close interface ");
libnet_destroy_packet(&packet); /* Bos paket maddesi */
return (n == -1 ? EXIT_FAILURE : EXIT_SUCCESS);
}
Bir başka ornek, buda Perl un Net modulu ile kodlanmıstır ;
#!/usr/bin/perl
use Net::RawIP;
use Net:
capUtils;
use NetPacket::Ethernet qw
strip);
use NetPacket::TCP;
use NetPacket::IP qw
strip);
printf " [ Simple Packets Injector ] ";
printf "Functions : ";
printf "[1] - Promiscuous packets sniffer ";
printf "[2] - Packets injector ";
printf "Input function’s number : ";
$funct = <STDIN>;
chomp $funct;
if ($funct eq "1") {
sniffer();
}
elsif ($funct eq "2") {
injector();
}
else {
printf " Unknown function ... ";
exit(1);
}
sub sniffer {
if($> != 0)
{die ’’ağ trafigini sniff lemek için EUID SIFIR olmalı ... ";}
Net:
capUtils::loop(&sniffit,
Promisc => 1,
FILTER => ’tcp’,
DEV => ’eth0’);
sub sniffit{
my ($args,$header,$packet) = @_;
$ip = NetPacket::IP->decode(eth_strip($packet));
$tcp = NetPacket::TCP->decode($ip->{data});
print "$ip->{src_ip}:$tcp->{src_port} --> $ip->{dest_ip}:$tcp->{dest_port} ";}}
sub injector{
$packet = new Net::RawIP;
$packet->set({
ip => { saddr => ’192.168.1.1’,
daddr => ’192.168.1.2’},
tcp => { source => 2323,
dest => 23,
ack => 1,
seq => 10000000,
ack_seq => 10000000,
data => ’Testing Net::RawIP’}});
$packet->send(0,1);}
Tamamen Araklamadır Bilginize
1-Giriş
2-genel bilgiler
3-paketler
4-injection yapısız ve calısması
5-paket enjekte etmek
1-Giriş
Bu doküman ile özel teknik yardımıyla bütün ağ trafiğini ve yeni paketleri bulmak mümkündür. Basit C dili gereklidir.
2-genel bilgiler
internetin çalışma katman esasına dayanarak bilgisayarın ne zaman olduğuna ve birinci veri ile ikinci veri bağlantı geçişinden önce diğer protokol katmanlarının yapacağı kısmın çalışması.
internetteki katmanları üç tiptir:
a) taşıma katmanı
Bu katman gonderilen bir verileri alır ve birçok kücük katmana boler, TCP transfer kontrol protokolü ve UDP kullanıcı protokolleri kullanır.
b) internet katmanı
Bu katman tum host a tek bir belirleyici verir ve tum paketleri kaynak hosttan duzenler. Tam bir guvenli veri aktarımı gercekleştiremez. Ve bu kataman protokol çeşitlerinden IP ( Internet Protokolu ) yi kullanır.
c) bağlantı katmanı
Bu katmana bağlı olarak çeşitli donanım ile çeşitli bağlantı tipleri:
BBE,IEEE 802,X.25,PPP,SLIP ve IP protokolleri.
3-paketler
paket olusturmanın bir çok zor tekniği vardır.
temel yapısız bir paket ornegi :
+---------------------------------+
| ethernet başlığı | ana paket |
+---------------------------------+
İlk blok paket kaynagını tespit etmek için kullanılır; ilk blogun bitişi e (Ethernet başlıgının bitisi) karakteri ile gosterilir.
TCP/IP ana paketinin basit yapısı aşagıdaki gibidir :
+----------------------------+
| IP datagram | TCP paketi |
+----------------------------+
TCP paketi baska bloklarada bolunmustur.
Sonuc olarak TCP paketi aşagıdaki formdadır :
+--------------------------------------------------------------+
| Ethernet başlığı | IP datagram | TCP başlığı | TCP verisi |
+--------------------------------------------------------------+
Eger TCP paketi olusturmak istiyorsak, paket baslıgı ve ana TCP paketi lazımdır.
Diger paketler için, örnegin ARP, içinde aynıdır ( sonra Ethernet baslıgı ve ana ARP paketi )
4-injection yapısız ve calısması
Paket injector ikiye bolunmustur;
[1]ağ
[2]konsol
birinci kısım ağ trafiğini ve bütün yakalanan paketler ; Bu yüzden injector tum paketleri tanımayı dener ( tipini, kaynağını, hedefini, protokolünü) ve ekrana yazar.
İkinci kısım kullanıcıya injector ile etkileşimi sağlayabilir ve filtre listesini paket sniff için ayarlar
Paket injector bir cok yolla paketleri filtreleyebilir ;
[1]paketlerin tipleri
[2]paketlerin tipi birbirine etki eden IP Datagram
[3]kaynak IP
[4]hedef IP
[5]kaynak port
[6]heder port
5- paket injecting
Paket injecting ile paket yapımı ve ağ uzerinden yollanması mumkun olmaktadır.
Paket injector bir dizi kolay kod kullanmaktadır, örnegin eger bizim paketimizin adı "test.pkt" ise, programın girişi soyle olmadır :
set infile test.pkt <-- hangi paketin inject olacanıgı belirler
do inject <-- paketi inject etmek için emri verir
Bu sadece cok basit bir ornekti, fakat injector baska parametrelerede ihtiyaç duyar, örnegin kaynak ve hedef Ethernet adresi gibi .. :
setmyeth aa:aa:aa:aa:aa:aa <- Kaynak ethernet adresini aa:aa:aa:aa:aa:aa olarak ayarlar
setethto bb:bb:bb:bb:bb:bb <- Hedef ethernet adresini bb:bb:bb:bb:bb:bb larak ayarlar
set filleth x <- filleth i x olarak ayarlar( x bir sayı )
set fillethto x <- fillethto i x larak ayarlar( x bir sayı )
set infile test.pkt <-- hangi paketin inject olacanıgı belirler
do inject <-- paketi inject etmek için emri verir
Bunlar haricinde baska fonksiyonlar vardır fakat bunlar kadar onemli degildir.
Paket injector 3 temel fonkisyona sahiptir :
+-----------------+ +------------------+ +------------------------+
| Packet sniffer | -> | Packet injector | -> | Packet sınıflandırma |
+-----------------+ +------------------+ +------------------------+
aşağıdaki kod, paket injection için, Libnet kullanarak yazılmıstır.
packetsinjector.c
#include <libnet.h>
int main(void) {
int network; /* ’’ağ dönüşümü’’tarafından ve kullanılan paketleri ne zaman yazacağı ve ne zman kapatacağı */
int packet_size; /* ’’paket boyutu’’kullanılan bellek yığını ve paketi ne zaman yazacağı tartışılır. */
int n; /* gonderilen byte */
u_char *packet; /* paket */
u_long src_ip, dst_ip;
u_short src_port, dst_port;
src_ip = libnet_name_resolve("192.168.9.17", LIBNET_RESOLVE); /* Adresleme duzenleniyor */
if (!src_ip)
libnet_error(LIBNET_ERR_FATAL, "Bad destination IP ");
src_port = 5000;
dst_ip = libnet_name_resolve("213.93.39.87", LIBNET_RESOLVE);
if (!dst_ip)
libnet_error(LIBNET_ERR_FATAL, "Bad src IP ");
dst_port = 80;
packet_size = LIBNET_IPV4_H + LIBNET_TCP_H; /* paket boyutunu yanlızca tanımlayarak TCP ve IP başlığını..kullanarak */
libnet_init_packet (packet_size, &packet); /* Ayrı bellek */
if (!packet)
libnet_error(LIBNET_ERR_FATAL, "libnet_init_packet failed ");
network = libnet_open_raw_sock (IPPROTO_RAW); /* açık ağ arabirimi */
if (network == -1)
libnet_error(LIBNET_ERR_FATAL, "Cannot open network interface "); /* paket yapı arabirim */
libnet_build_ip (LIBNET_TCP_H, /* boyut */
IPTOS_LOWDELAY,
242, /* IPID */
0, /* Ayrılmama */
48, /* Bulunma zamnı */
IPPROTO_TCP, /* Protokol */
src_ip, /* Kaynak IP address */
dst_ip, /* Hedef IP address */
NULL, /* Payload */
0, /* payload uzunlugu */
packet); /* paket hafıza baslıgı */
/* paket yapısı */
libnet_build_tcp (src_port, /* kaynak TCP port */
dst_port, /* hedef TCP Port */
0xa1d95, /* islem numarası */
0x53, /* Ack numarası */
TH_SYN, /* SYN flag ının ayarlanması */
1024, /* Pencere boyutu */
0, /* Acil kapalı */
NULL, /* Payload */
0, /* Payload uzunlugu */
packet + LIBNET_IPV4_H); /* packet hafıza başlığı */
if (libnet_do_checksum(packet, IPPROTO_TCP, LIBNET_TCP_H) == -1) /* Checksum */
libnet_error(LIBNET_ERR_FATAL, "libnet_do_checksum failed ");
n = libnet_write_ip (network, packet, packet_size); /* INJECTION */
if (n < packet_size)
libnet_error(LN_ERR_WARNING, "libnet_write_ip only wrote %d bytes ", n);
else
printf("Construction and injection completed, wrote all %d bytes ", n);
if (libnet_close_raw_sock(network) == -1) /* Temizlik */ libnet_error(LN_ERR_WARNING, "libnet_close_raw_sock couldn’t close interface ");
libnet_destroy_packet(&packet); /* Bos paket maddesi */
return (n == -1 ? EXIT_FAILURE : EXIT_SUCCESS);
}
Bir başka ornek, buda Perl un Net modulu ile kodlanmıstır ;
#!/usr/bin/perl
use Net::RawIP;
use Net:
use NetPacket::Ethernet qw
use NetPacket::TCP;
use NetPacket::IP qw
printf " [ Simple Packets Injector ] ";
printf "Functions : ";
printf "[1] - Promiscuous packets sniffer ";
printf "[2] - Packets injector ";
printf "Input function’s number : ";
$funct = <STDIN>;
chomp $funct;
if ($funct eq "1") {
sniffer();
}
elsif ($funct eq "2") {
injector();
}
else {
printf " Unknown function ... ";
exit(1);
}
sub sniffer {
if($> != 0)
{die ’’ağ trafigini sniff lemek için EUID SIFIR olmalı ... ";}
Net:
Promisc => 1,
FILTER => ’tcp’,
DEV => ’eth0’);
sub sniffit{
my ($args,$header,$packet) = @_;
$ip = NetPacket::IP->decode(eth_strip($packet));
$tcp = NetPacket::TCP->decode($ip->{data});
print "$ip->{src_ip}:$tcp->{src_port} --> $ip->{dest_ip}:$tcp->{dest_port} ";}}
sub injector{
$packet = new Net::RawIP;
$packet->set({
ip => { saddr => ’192.168.1.1’,
daddr => ’192.168.1.2’},
tcp => { source => 2323,
dest => 23,
ack => 1,
seq => 10000000,
ack_seq => 10000000,
data => ’Testing Net::RawIP’}});
$packet->send(0,1);}
Tamamen Araklamadır Bilginize