X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-dhcp.git/blobdiff_plain/5b5216809d7e7d0e78df31d274c2e97eb77be2c2..9007b014f45be76bf183371353068bab12b749f6:/code/pydhcplib/scripts/pydhcp diff --git a/code/pydhcplib/scripts/pydhcp b/code/pydhcplib/scripts/pydhcp new file mode 100644 index 0000000..a0fec1b --- /dev/null +++ b/code/pydhcplib/scripts/pydhcp @@ -0,0 +1,122 @@ +#!/usr/bin/python + + +from pydhcplib import dhcp_constants +from pydhcplib import dhcp_packet +from pydhcplib import dhcp_network + +from pydhcplib import type_hw_addr +from pydhcplib import type_ipv4 +from pydhcplib import type_strlist + +import sys + +from optparse import OptionParser + + +parser = OptionParser() + +""" Action options """ +parser.add_option("-L", "--listen", action="store_true",dest="listen", help="",default=False) +parser.add_option("-E", "--emit", action="store_true",dest="emit", help="", default=False) +parser.add_option("-R", "--readable-conversion", action="store_true",dest="readable", help="", default=False) +parser.add_option("-B", "--binary-conversion", action="store_true",dest="binary", help="", default=False) +parser.add_option("-s", "--source-file", action="store",dest="source", help="", default=False, type="string") +parser.add_option("-d", "--destination-file", action="store",dest="destination", help="", default=False, type="string") +parser.add_option("-p", "--port", action="store",dest="port", help="", default="67", type="int") +parser.add_option("-a", "--address", action="store",dest="address", help="", default="0.0.0.0", type="string") +parser.add_option("-r", "--raw", action="store",dest="raw", help="", default=False,type="string") +parser.add_option("-n", "--number", action="store",dest="number", help="", default="0", type="int") + + + +(options, args) = parser.parse_args() + +print options + + + +def main() : + ActionSum = 0 + for Action in (options.listen,options.emit,options.readable,options.binary) : + if Action == True : ActionSum += 1 + if ActionSum > 1 : + print "Command line error : [-L -E -R -B] Only one of these actions can be taken." + sys.exit(0) + + if options.readable == True : r_conversion() + + if options.binary == True : b_conversion() + + if options.listen == True : + if options.raw == False: + listen_address(options.address,options.port,int(options.number)) + else : + print "Listen RAW : ",options.raw + listen_packet(options.raw,options.number) + + if options.emit == True : emit(options.address,options.port) + + +def listen_address(address,port,number) : + listener = dhcp_network.DhcpClient(address,port,port) + + if (number == 0 ) : + while True : + packet = listener.GetNextDhcpPacket() + packet.PrintHeaders() + packet.PrintOptions() + + else : + while number > 0 : + packet = listener.GetNextDhcpPacket() + packet.PrintHeaders() + packet.Print() + + number -= 1 + +def listen_packet(interface,number) : + listener = dhcp_network.DhcpRawClient(mysocket) + + if (number == 0 ) : + while True : + packet = dhcp_packet.DhcpPacket() + + packet.DecodePacket(listener.Receive(1024)) + packet.PrintHeaders() + packet.PrintOptions() + + else : + while number > 0 : + packet = dhcp_packet.DhcpPacket() + + packet.DecodePacket(listener.Receive(1024)) + packet.PrintHeaders() + packet.PrintOptions() + + number -= 1 + + +def emit(address,port) : + pass + +def r_conversion() : + rawdata = sys.stdin.read() + while ( len(rawdata)>0 ) : + readdata = dhcp_packet.DhcpPacket() + readdata.DecodePacket(rawdata) + readdata.PrintHeaders() + readdata.PrintOptions() + rawdata = sys.stdin.read() + +def b_conversion() : + """ + pythondata = sys.stdin.read() + while ( len(pythondata)>0 ) : + data = dhcp_packet.DhcpPacket() + data.DecodePacket(rawdata) + + pythondata = sys.stdin.read() + """ + +main()