11"""A Pythonic interface to the Internet Storm Center / DShield API."""
22
3+ import datetime
34import requests
45
56__version__ = "0.2"
@@ -109,62 +110,50 @@ def portdate(port_number, date=None, return_format=None):
109110 else :
110111 return response
111112
112- def topports (sort_by = None , limit = None , date = None , return_format = None ):
113+ def topports (sort_by = 'records' , limit = 10 , date = None , return_format = None ):
113114 """Information about top ports for a particular date with return limit.
114115
115116 :param sort_by: one of 'records', 'targets', 'sources'
116117 :param limit: number of records to be returned
117118 :param date: an optional string in 'Y-M-D' format or datetime.date() object
118119 """
119- uri = 'topports'
120- if sort_by :
121- uri = '/' .join ([uri , sort_by ])
122- if limit :
123- uri = '/' .join ([uri , str (limit )])
124- if date :
125- try :
126- uri = '/' .join ([uri , date .strftime ("%Y-%m-%d" )])
127- except AttributeError :
128- uri = '/' .join ([uri , date ])
120+ uri = '/' .join (['topports' , sort_by , str (limit )])
121+ if date :
122+ try :
123+ uri = '/' .join ([uri , date .strftime ("%Y-%m-%d" )])
124+ except AttributeError :
125+ uri = '/' .join ([uri , date ])
129126 return _get (uri , return_format )
130127
131- def topips (sort_by = None , limit = None , date = None , return_format = None ):
128+ def topips (sort_by = 'records' , limit = 10 , date = None , return_format = None ):
132129 """Information about top ports for a particular date with return limit.
133130
134131 :param sort_by: one of 'records', 'attacks'
135132 :param limit: number of records to be returned
136133 :param date: an optional string in 'Y-M-D' format or datetime.date() object
137134 """
138- uri = 'topips'
139- if sort_by :
140- uri = '/' .join ([uri , sort_by ])
141- if limit :
142- uri = '/' .join ([uri , str (limit )])
143- if date :
144- try :
145- uri = '/' .join ([uri , date .strftime ("%Y-%m-%d" )])
146- except AttributeError :
147- uri = '/' .join ([uri , date ])
135+ uri = '/' .join (['topips' , sort_by , str (limit )])
136+ if date :
137+ try :
138+ uri = '/' .join ([uri , date .strftime ("%Y-%m-%d" )])
139+ except AttributeError :
140+ uri = '/' .join ([uri , date ])
148141 return _get (uri , return_format )
149142
150- def sources (sort_by = None , limit = None , date = None , return_format = None ):
143+ def sources (sort_by = 'attacks' , limit = 10 , date = None , return_format = None ):
151144 """Information summary from the last 30 days about source IPs with return
152145 limit.
153146
154147 :param sort_by: one of 'ip', 'count', 'attacks', 'firstseen', 'lastseen'
155148 :param limit: number of records to be returned (max 10000)
156149 :param date: an optional string in 'Y-M-D' format or datetime.date() object
157150 """
158- uri = 'sources'
159- if sort_by :
160- uri = '/' .join ([uri , sort_by ])
161- if limit :
162- uri = '/' .join ([uri , str (limit )])
163- if date :
164- try :
165- uri = '/' .join ([uri , date .strftime ("%Y-%m-%d" )])
166- except AttributeError :
167- uri = '/' .join ([uri , date ])
151+ uri = '/' .join (['sources' , sort_by , str (limit )])
152+ if date :
153+ try :
154+ uri = '/' .join ([uri , date .strftime ("%Y-%m-%d" )])
155+ except AttributeError :
156+ uri = '/' .join ([uri , date ])
168157 return _get (uri , return_format )
169158
170159def porthistory (port_number , start_date = None , end_date = None , return_format = None ):
@@ -181,16 +170,20 @@ def porthistory(port_number, start_date=None, end_date=None, return_format=None)
181170 :param end_date: string or datetime.date(), default is today
182171 """
183172 uri = 'porthistory/{port}' .format (port = port_number )
184- if start_date :
173+
174+ if not start_date :
175+ # default 30 days ago
176+ start_date = datetime .datetime .now () - datetime .timedelta (days = 30 )
177+
178+ try :
179+ uri = '/' .join ([uri , start_date .strftime ("%Y-%m-%d" )])
180+ except AttributeError :
181+ uri = '/' .join ([uri , start_date ])
182+ if end_date :
185183 try :
186- uri = '/' .join ([uri , start_date .strftime ("%Y-%m-%d" )])
184+ uri = '/' .join ([uri , end_date .strftime ("%Y-%m-%d" )])
187185 except AttributeError :
188- uri = '/' .join ([uri , start_date ])
189- if end_date :
190- try :
191- uri = '/' .join ([uri , end_date .strftime ("%Y-%m-%d" )])
192- except AttributeError :
193- uri = '/' .join ([uri , end_date ])
186+ uri = '/' .join ([uri , end_date ])
194187 response = _get (uri , return_format )
195188 if 'bad port number' in str (response ):
196189 raise Error ('Bad port, {port}' .format (port = port_number ))
@@ -222,16 +215,20 @@ def dailysummary(start_date=None, end_date=None, return_format=None):
222215 :param end_date: string or datetime.date(), default is today
223216 """
224217 uri = 'dailysummary'
225- if start_date :
218+
219+ if not start_date :
220+ # default today
221+ start_date = datetime .datetime .now ()
222+
223+ try :
224+ uri = '/' .join ([uri , start_date .strftime ("%Y-%m-%d" )])
225+ except AttributeError :
226+ uri = '/' .join ([uri , start_date ])
227+ if end_date :
226228 try :
227- uri = '/' .join ([uri , start_date .strftime ("%Y-%m-%d" )])
229+ uri = '/' .join ([uri , end_date .strftime ("%Y-%m-%d" )])
228230 except AttributeError :
229- uri = '/' .join ([uri , start_date ])
230- if end_date :
231- try :
232- uri = '/' .join ([uri , end_date .strftime ("%Y-%m-%d" )])
233- except AttributeError :
234- uri = '/' .join ([uri , end_date ])
231+ uri = '/' .join ([uri , end_date ])
235232 return _get (uri , return_format )
236233
237234def daily404summary (date , return_format = None ):
0 commit comments