What are Raw Sockets?
• Allows you to bypass the TCP/UDP layers.
• Send/receive your own packets, with your own headers.
• You need to do all protocol processing at user-level.
Typical Uses• ICMP messages
– ping generates ICMP echo requests and received ICMP echo replies.
• Routing protocols– gated implements OSPF routing protocol.– Uses IP packets with protocol ID 89 – not supported by
kernel.
• Hacking – Generating your own TCP/UDP packets with spoofed
headers
Raw socket creation
• Only root can open a raw socket.
sockfd = socket(AF_INET, SOCK_RAW, proto)
where proto is IPPROTO_RAW, IPPROTO_ICMP etc.
Raw socket output
• As usual – sendto(), sendmsg() etc.
• IP_HDRINCL option – Specifies whether the process or the kernel
builds the IP header.
/* allow process to build IP header */int on=1; setsockopt( sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))
Raw socket input• Normally using recvfrom()• Conditions for a packet to match raw socket
– If protocol parameter was specified, only packets with that protocol value are delivered.
– If bind() was called on raw socket, only packets destined to bound IP address are delivered.
– If connect() was called, only packets from connected address are delivered.
Which protocol types are delivered?
• TCP and UDP never reach raw sockets– Kernel IP stack handles these– Linux implementation is an exception.
• All ICMP except– ICMP echo request– Timestamp request– Mask request
• All IGMP
• All other protocols that kernel doesn't understand– Such as OSPF
Exercise
Write a simple “Hello” exchange program using raw sockets
that implements your own protocol
on top of IP.
Java
Reference Book -
“Thinking in Java”
by Bruce Eckel
Book is online at
http://www.mindview.net/books/TIJ
Levels of abstraction
Machine
Assembly language
Imperative languages(C, FORTRAN, ALGOL)
Object oriented languages(C++, Java)
Low-levelmachine details
Abstracting the machine model
Abstracting the problem as object interactions
Object
• An object has – State (internal data)– Behavior (methods that operate on data)– Identity (object can be addressed uniquely)
Objects…
• Class defines properties of a set of similar objects.– Think of it as type of the object
• Protection boundaries define what object state is visible to others.
• Inheritance allows a new class to inherit properties of an earlier class without re-defining them.
• Interface defines what requests others can make to a particular object
Primitive Data types
• boolean - false• char - ‘\u0000’ (null)• byte - (byte)0• short - (short)0• int - 0• long - 0L• float - 0.0f• double -0.0d
Creating a class
class Circle {
public :Circle(int x, int y, float r) {…}void draw(){…}void erase(){…}void move(){…}
private :int x_;int y_;float radius_;
}
Methods
Fields
Inheritanceabstract class Shape {
public :
Shape(int x, int y) {
x_ = x;
y_ = y;
}abstract void draw();
abstract void erase();
abstract void move();
protected :
int x_;
int y_;
}
Inheritance…class Circle extends Shape
{
Circle(int x,int y,float r){
super(x,y);
radius_ = r;
}void draw() {…}void erase(){…}void move(){…}
protected :
float radius_;
}
Inheritance…class Square extends Shape
{
Square(int x,int y,float w){
super(x,y);
width_ = r;
}void draw() {…}void erase(){…}void move(){…}
protected :
float width_;
}
void doStuff(Shape s) {
s.erase(); // ... s.draw();
}
Circle c = new Circle(); Square s = new Square(); Line l = new Line();
doStuff(c); doStuff(s); doStuff(l);
Interfaces
interface DrawObject {// automatically public
void draw();
void erase();
void move();
// Compile-time constant:
int SOME_CONST = 5; // static & final
}
class Circle extends Shape implements DrawObject
{
Circle(int x,int y,float r){
super(x,y);
radius_ = r;
}void draw() {…}void erase(){…}void move(){…}
protected :
float radius_;
}
class Square extends Shape implements DrawObject
{
Square(int x,int y,float w){
super(x,y);
width_ = r;
}void draw() {…}void erase(){…}void move(){…}
protected :
float width_;
}
static members• static fields or methods have one instance across
all object instancesclass X {
static int i = 0;
……
}
x1 = new X();
x2 = new X();
x1.i++;
x2.i++;
System.out.println(“Result = “ + x2.i);
Result = 2
final member/class• final class X {
…}Final classes cannot be extended.
• class X {final int m();
}Final methods cannot be overridden.
• int mthd(final MyClass mc) {…}– Final arguments cannot be modified.
• final int MY_CONST = 10;– Final fields/references are constants
Things you should learn from TIJ
• Packaging your classes - Chapter 5
• Java I/O system - Chapter 11
• Error handling with exceptions - Chapter 10
• Applets - Chapter 14
Using Standard Java Packages
java import java.lang.*;
public class HelloDate {public static void main(String[] args) {
System.out.println("Hello, it's: ");System.out.println(new Date());
} }
Top Related