none
Omezení raw socketů [c++]

    질문

  • Zdravím.

    Zajímalo by mě, proč microsoft do systémů win xp sp2 a výš dodělal některá omezení raw socketů. Konkrétně se mi jedná o posílání TCP dat přes raw sockety a volání funkce bind() při použití raw socketů. Chápu, že microsoft si chrání záda tím, že do berkeley socketového modelu dodatečně implementoval omezení, která brání programátorovi v odeslání UDP datagramu s chybně uvedenou IP adresou. (to šlo využít k ddos útoku a proto je zřejmé proč nelze odeslat datagram s chybne uvedenou ip adresou ). Furt mi nejde na rozum, proč ms zamítl použití fce bind při použití raw socketů. Může mi prosím někdo objasnit tato omezení?

    Na výše zmíněná omezení jsme narazil zde: http://msdn.microsoft.com/en-us/library/ms740548(VS.85).aspx

    Dále jsem se chtěl zeptat, proč na stránkách MSDN není podrobnější info o raw socketech. V součastnosti bych více informací uvítal. Našel jsem sice již zmíněnou stránku kde je nějaké to základní info o raw socketech, ale nějaký přílklad či popis struktur TCP, IP, UDP hlaviček. Jak vytvořit instanci těchto struktur, a jak se vůbec zmíněné struktury nazývají, atp...
    • 편집됨 thinksonix 2009년 12월 31일 목요일 오후 12:55
    2009년 12월 31일 목요일 오전 12:51

답변

  • Hlavními důvody omezení této funkčnosti jsou kromě Vámi zmíněných bezpečnostních hledisek také možné dopady na konektivitu ostatních aplikací běžících na stejném počítači. Protože RAW sockety se váží na rozhraní síťové a transportní vrstvy, v případě, že by se některá aplikace rozhodla RAW socket na dané IP adrese zřídit, mohlo by dojít k narušení konektivy a přenášených informací ostatních aplikací a systémových služeb. To lze chápat jako zásadní bezpečnostní problém, zejména ve víceuživatelských prostředích (např. terminálové servery, apod.).

    Vámi uvedený článek zároveň nabízí adekvátní řešení požadované problematiky - implementaci vlastního ovladače rozhraní TDI, který poběží v režimu jádra a bude mít plný přístup ke komunikaci na zvoleném síťovém adaptéru.

    Samozřejmě chápu, že implementace síťového ovladače není triviální záležitostí, nicméně siťovou konektivitu je nutné chápat jako sdílený prostředek, který v operačním systému podléhá obdobným omezením, jako přímý přístup k hardware.

    Michal Jakubec
    2010년 3월 4일 목요일 오후 4:47