IP address Subnetting Ping command in detail Threads in Python Sub process in Python
IPv4 Addressing- Introduction An IP address is a 32-bit address that uniquely and universally defines the connection of a host or a router to the Internet. IP addresses are unique. 3
Note: An IP address is a 32-bit address. 4
Note: The IP addresses are unique. 5
Note: The address space of IPv4 is 2 32 or 4,294,967,296. 6
Dotted-decimal and Binary equivalent notation 7
Example 1 Change the following IP addresses from binary notation to dotteddecimal notation. a. 10000001 00001011 00001011 11101111 b. 11000001 10000011 00011011 11111111 c. 11100111 11011011 10001011 01101111 d. 11111001 10011011 11111011 00001111 Solution We replace each group of 8 bits with its equivalent decimal number and add dots for separation: a. 129.11.11.239 b. 193.131.27.255 c. 231.219.139.111 d. 249.155.251.15 8
Example 2 Change the following IP addresses from dotted-decimal notation to binary notation. a. 111.56.45.78 b. 221.34.7.82 c. 241.8.56.12 d. 75.45.34.78 Solution We replace each decimal number with its binary equivalent: a. 01101111 00111000 00101101 01001110 b. 11011101 00100010 00000111 01010010 c. 11110001 00001000 00111000 00001100 d. 01001011 00101101 00100010 01001110 TCP/IP Protocol Suite 9
Finding the class in binary notation TCP/IP Protocol Suite 11
Example Find the class of each address: a. 00000001 00001011 00001011 11101111 b. 11000001 10000011 00011011 11111111 c. 10100111 11011011 10001011 01101111 d. 11110011 10011011 11111011 00001111 Solution a. The first bit is 0. This is a class A address. b. The first 2 bits are 1; the third bit is 0. This is a class C address. c. The first bit is 0; the second bit is 1. This is a class B address. d. The first 4 bits are 1s. This is a class E address.. TCP/IP Protocol Suite 12
Finding the class in decimal notation TCP/IP Protocol Suite 13
Example Find the class of each address: a. 227.12.14.87 b.193.14.56.22 c.14.23.120.8 d. 252.5.15.111e.134.11.78.56 Solution a. The first byte is 227 (between 224 and 239); the class is D. b. The first byte is 193 (between 192 and 223); the class is C. c. The first byte is 14 (between 0 and 127); the class is A. d. The first byte is 252 (between 240 and 255); the class is E. e. The first byte is 134 (between 128 and 191); the class is B. TCP/IP Protocol Suite 14
Netid and hostid TCP/IP Protocol Suite 15
Example Given the network address 17.0.0.0, find the class, the block, and the range of the addresses. Solution The class is A because the first byte is between 0 and 127. The block has a netid of 17. The addresses range from 17.0.0.0 to 17.255.255.255. TCP/IP Protocol Suite 16
Example Given the network address 132.21.0.0, find the class, the block, and the range of the addresses. Solution The class is B because the first byte is between 128 and 191. The block has a netid of 132.21. The addresses range from 132.21.0.0 to 132.21.255.255. TCP/IP Protocol Suite 17
Example Given the network address 220.34.76.0, find the class, the block, and the range of the addresses. Solution The class is C because the first byte is between 192 and 223. The block has a netid of 220.34.76. The addresses range from 220.34.76.0 to 220.34.76.255. TCP/IP Protocol Suite 18
Masking concept TCP/IP Protocol Suite 19
AND operation TCP/IP Protocol Suite 20
TCP/IP Protocol Suite 21
Note: The network address is the beginning address of each block. It can be found by applying the default mask to any of the addresses in the block (including itself). It retains the netid of the block and sets the hostid to zero. TCP/IP Protocol Suite 22
Example Given the address 23.56.7.91, find the beginning address (network address). Solution The default mask is 255.0.0.0, which means that only the first byte is preserved and the other 3 bytes are set to 0s. The network address is 23.0.0.0. TCP/IP Protocol Suite 23
Example Given the address 132.6.17.85, find the beginning address (network address). Solution The default mask is 255.255.0.0, which means that the first 2 bytes are preserved and the other 2 bytes are set to 0s. The network address is 132.6.0.0. TCP/IP Protocol Suite 24
Example Given the address 201.180.56.5, find the beginning address (network address). Solution The default mask is 255.255.255.0, which means that the first 3 bytes are preserved and the last byte is set to 0. The network address is 201.180.56.0. TCP/IP Protocol Suite 25
.
IPv4 Addressing- Subnetting The problems associated with classful addressing is that the network addresses available for assignment to organizations are close to depletion. This is coupled with the ever-increasing demand for addresses from organizations that want connection to the Internet. In this section we briefly discuss two solutions: subnetting and supernetting. TCP/IP Protocol Suite 27
Note: IP addresses are designed with two levels of hierarchy. TCP/IP Protocol Suite 28
A network with two levels of hierarchy (not subnetted) TCP/IP Protocol Suite 29
Addresses in a network with and without subnetting TCP/IP Protocol Suite 30
Default mask and subnet mask TCP/IP Protocol Suite 31
Comparison of a default mask and a subnet mask TCP/IP Protocol Suite 32
Example What is the subnetwork address if the destination address is 200.45.34.56 and the subnet mask is 255.255.240.0? Solution We apply the AND operation on the address and the subnet mask. Address 11001000 00101101 00100010 00111000 Subnet Mask 11111111 11111111 11110000 00000000 Subnetwork Address 11001000 00101101 00100000 00000000. TCP/IP Protocol Suite 33
Style -1 Subnetting when given a required number of networks Example 1: A service provider has given you the Class C network range 209.50.1.0. Your company must break the network into 20 separate subnets. Solution Step 1) Determine the number of subnets and convert to binary -In this example, the binary representation of 20 = 00010100. Step 2) Reserve required bits in subnet mask and find incremental value - The binary value of 20 subnets tells us that we need at least 5 network bits to satisfy this requirement TCP/IP Protocol Suite 34
Example 1 continued - Our original subnet mask is 255.255.255.0 (Class C subnet) - The full binary representation of the subnet mask is as follows: 255.255.255.0 = 11111111.11111111.11111111.00000000 - We must convert 5 of the client bits (0) to network bits (1) in order to satisfy the requirements: New Mask = 11111111.11111111.11111111.11111000 -If we convert the mask back to decimal, we now have the subnet mask that will be used on all the new networks 255.255.255.248 TCP/IP Protocol Suite 35
Example 1 continued New subnet mask 255.255.255.248 Our increment bit is the last possible network bit, converted back to a binary number: New Mask = 11111111.11111111.11111111.1111(1)000 bit with the parenthesis is your increment bit. If you convert this bit to a decimal number, it becomes the number 8 that is every subnet is having 8 addresses allotted to it (from 0 to 7, then 8 to 15 etc) TCP/IP Protocol Suite 36
Example 1 continued Step 3) Use increment to find network ranges You can now fill in your end ranges, which is the last possible IP address before you start the next range 209.50.1.0 209.50.1.7 209.50.1.8 209.50.1.15 209.50.1.16 209.50.1.23 etc You can then assign these ranges to your networks! Remember the first and last address from each range (network / broadcast IP) are unusable TCP/IP Protocol Suite 37
ping - may be used to test basic 2-way connectivity Syntax Ping [-c count] [-i wait] [-l preload] [-p pattern] [-s packetsize] hostname/ipaddress DESCRIPTION Ping uses the ICMP protocol s mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE from a host or gateway. ECHO_REQUEST datagrams ( pings ) have an IP and ICMP header, followed by a struct timeval and then an arbitrary number of pad bytes used to fill out the packet.
ping 10.1.32.124 response from 10.1.32.124 Reply from 74.125.224.82: bytes=32 time=6ms TTL=64 Reply from 74.125.224.82: bytes=32 time=6ms TTL=64 Reply from 74.125.224.82: bytes=32 time=5ms TTL=64 Reply from 74.125.224.82: bytes=32 time=6ms TTL=64 Ping statistics for 74.125.224.82: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 5ms, Maximum =6ms, Average = 6ms
from threading import Thread import subprocess from Queue import Queue num_threads = 4 queue = Queue() ips = ["11.11.3.230", "11.11.3.229", "11.11.3.228", "10.0.1.51"]
#wraps system ping command def pinger(i, q): """Pings subnet""" while True: ip = q.get() print "Thread %s: Pinging %s" % (i, ip) ret = subprocess.call("ping -c 1 %s" % ip, shell=true, stdout=open('/dev/null', 'w'), stderr=subprocess.stdout)
# ToDo: take the return value and check if computer is alive or dead if ret == 0: print"%s Alive"% ip else: print"%snot Alive"% ip q.task_done()
#Spawn thread pool for i in range(num_threads): worker = Thread(target=pinger, args=(i, queue)) worker.setdaemon(true) worker.start() #Place work in queue for ip in ips: queue.put(ip) #Wait until worker threads are done to exit queue.join()
subprocess.call(args, *, stdin=none, stdout= args: should be a sequence of program arguments or else a single string. By default, the program to execute is the first item in args if args is a sequence. If args is a string, the interpretation is platform-dependent. It is recommended to pass args as a sequence. shell: shell argument (which defaults to False) specifies whether to use the shell as the program to execute. If shell is True, it is recommended to pass args as a string rather than as a sequence. On Unix with shell=true, the shell defaults to /bin/sh. If args is a string, the string specifies the command to execute through the shell. This means that the string must be formatted exactly as it would be when typed at the shell prompt. This includes, for example, quoting or backslash escaping filenames with spaces in them. If args is a sequence, the first item specifies the command string, and any additional items will be treated as additional arguments to the shell itself. None, stderr=none, shell=false)
stdin, stdout and stderr: specify the executed program's standard input, standard output and standard error file handles, respectively. Valid values are PIPE, an existing file descriptor (a positive integer), an existing file object, and None. PIPE indicates that a new pipe to the child should be created. With the default settings of None, no redirection will occur; the child's file handles will be inherited from the parent. Additionally, stderr can be STDOUT, which indicates that the stderr data from the child process should be captured into the same file handle as for stdout.
# Import the module import subprocess # Ask the user for input host = raw_input("enter a host to ping: ") # Set up the echo command and direct the output to a pipe host = subprocess.popen(['ping', '-c 2', host], stdout=subprocess.pipe) print host