 Okay, hello everybody um so I toyed with the idea of throwing together an article of all the new stuff That's been implemented in recon ng, but I realized that article would be very long It would take you a long time to read it and it would take me about ten times longer to write it So I decided rather than do that. I'm just gonna do a quick recording a screencast of kind of Changes that have taken place and so on and so forth and just to kind of give everybody an idea of what's new and kind of how to use it Based on the changes that have been made so first and foremost This video assumes that you've used recon ng Up to the the most recent stable before version 5 which was version 4.9.6 So I'm not going to cover a bunch of the stuff that's been there for a very long time or that was there since the beginning I'm literally going to pick up where version 5 changes begin. So first that and second of all You know this video is ideally for folks that have either written about recon ng or Have recon ng in a training course. I want those folks to be able to update their content to be able to Properly, you know train their people on how to use the modern version and not continue to train them on using the old stuff So I would encourage those folks if you fall into that category Please reach out to me with any questions you have based on this video or things that don't cover so so on and so forth So that can help you get your content updated and you can continue to give people the correct information on On the modern most recent versions as opposed to the old ones, okay? So let's go ahead and jump into it first thing. We are now on github So recon ng is now over on github. I used to be hosted on bit bucket But now we're on github and basically the reason why I always had it on bit bucket before was because they allowed free private Repositories and that was kind of an attractive feature But now since github has implemented free private repositories. I moved it over there And so kind of well for both free Why didn't I just keep it where I had it because I enjoy github's interface better? I like some of their diagnostic and analytical tools better And I have a lot of my other open-source projects over there, too There's just overall. I'm a bigger fan of github than I am Atlassian Bigger fan of Microsoft than I am Atlassian as well And those are the separate companies that own these two service providers So we're over on a github now This is the this is the front page for it as you can see it's got to read me there all that good stuff And that's about all I'm going to show you inside of a web interface We're gonna spend the rest of the time looking at the terminal Okay, so now before we even start the framework. There's a couple of things that I want to show you Let's just do a quick help here Some new runtime features here. Oh another thing you may have noticed over here in my virtual environment here We've also upgraded to Python 3 with the Python 2 being deprecated here in the next year Six months to a year. We've gone ahead and upgraded everything to Python 3 Which was probably one of the larger tasks because that didn't just mean Converting over all of the code that makes up the framework itself But also all the code that makes up every single module and I believe there was over 95 of them when we started this conversion process So a lot of code needed to be converted over but it has and so now we're on Python 3 as well So here's some of the runtime options for recon ng. Some of this stuff has not changed You still have the ability to run resource files preselective workspace so on and so forth I mean if you didn't know some of these were already here some things that Recon ng does when you first load the framework is it will check for the version to see if you need an upgrade and then it'll prompt you to Upgrade it if you do You can disable that just by clicking or doing the dash dash no version switch. It also does analytics I'm not going to go into great detail with it is now. It's all in the wiki It's been there for a while But you've always had the ability to disable analytics as well with a command line switch And then with the addition of the marketplace, which I'll talk about here in a few minutes That also makes out outward reaching requests to a third party in order to pull back some information And so the idea is is all these things all these three things can be disabled independently But what I realize is some folks run this tool on internal assessments Where they need to be able to be stealth and they want the ability to disable all of these And so I can using I added this stealth switch here, which will disable all All in implicit right all implicit requests that are made by the framework By implicit I means things the framework does without you invoking them So the version check the analytics reporting and then reaching out updating the marketplace index there Okay, so those things all those implicit requests will be disabled And which means that those features won't be enabled as well And that'll that'll impact your your experience with the marketplace there But if you pre-installed your modules, you'll be good to go and we'll talk about that But this just gives you the ability to to be in complete control of of any network activity that reconNG creates And so I think that's a desirable feature. So that's been added in there now. I'm going to go ahead and start the framework with the No analytics just to prevent some additional traffic there And we'll go ahead and launch the framework And so one of the obvious things obvious things that pops up at first is the banners changed a little bit All of this is pretty much the same, but I've gone ahead and added my own company information to the bottom there since that's been started since this thing got big And then you'll notice it says no modules are enabled or installed I've already had somebody reach out to me and go hey something's wrong. Nothing's loading here. Well This is this is intentional this how it's supposed to be there is nothing except a empty framework to begin with And then I'm going to introduce you to the marketplace Which is where you'll get to pick and choose the module as you want rather than be forced to Have them all functioning on your system, which means all their dependencies all their API keys all of that stuff And then one of the common complaints I used to get with the old version is there'd be a bunch of errors up here For anything that didn't load properly Well, that's all gone now because those aren't there unless you choose to have them there And obviously if you choose to have a module there, you're probably going to satisfy those different dependencies You're going to satisfy the requirement of some sort of credential or key And so so that being said that shouldn't be a problem anymore. You won't see that stuff Okay, once again, we'll get to the marketplace here in a minute verbosity levels have always been there This you've got three different verbosity levels within the framework. You've got No verbosity at all, which means it just gives you pretty much output and no type of status information or anything And then you've got the verbosity level of one, which is gives you a little bit more context. That's the default That's where I normally operate as well. And then you've got the debugging level verbosity, which is a setting of two And that just gives you all possible information that the that the framework can spit out at you with regards to what's happening under the hood And so on and so forth database transactions web transactions all of that stuff and and I'll talk about this options command here in a minute, but This is the these are the options here. This is the verbosity option right there and gives you a little bit of information I don't know that I've ever covered that before. I know I've had some folks that were a little confused on what that means But that's what that is. It allows you to do that. Once again, number one is the default That's typically the desired level of output that folks want to work with and then if you're having issues, of course You can debug so let's talk about some of the command changes within the framework If we use our interactive help and I encourage people to use this interactive help It's awesome. You get a listing of all the commands. This isn't new This was all this has always been there, but some of the commands have changed You'll notice these this dashboard command was not there before DB command was not there before index command marketplace command modules command options command Script command so there are definitely some new commands in here. However, most of these are a Consolidation of commands that used to be all together, right? So within the DB command and we'll do help DB You can see that you ask for delete insert query in schema Well, if you remember these were for different commands before but I've consolidated them under the DB command as Subcommands because it makes sense right hierarchically it makes sense to say I'm interacting with the database for all four of these So I'm just going to go ahead and create a more organized command structure So that's what I've done there. And so under the DB command you have the ability to delete insert Records in the ante table, of course You had the ability to create a custom query there and then of course output output schema So that you can have the information you need to build custom queries and so on and so forth And you already saw a little bit of it, but the options command Has had similar changes Listing the options which used to be showing the options setting the options and un-setting the options are now all sub-commands of the Options command. So if you do options list or options set or options unset You'll see that's where you'll get to do those things. And once again I mean the help goes beyond just this first here if I do options set and I'm not sure what to put there Then it's going to tell me invalid option name And and that means that I need to give it a name of some sort There is tab completion as well. So if you start typing out verbosity, bam, you've got it there And then of course, it's you know, I just unset it there. So I'm gonna reset it to reset it to one So you've got you've got some built-in command as well There's not a whole lot to show you in any of those sub-commands But if I do like a DB query and then I don't give it a query Yep, you should see some of the more in-depth help that it says wait DB query expects some sort of sequel there So so there is help beyond just the first tier as well. All right, so that's DB That's options. The modules command is new. So let's take a look at that one and Basically I've consolidated a few more things there and so the actual loading of a module is under the modules Reloading of all of the modules in the framework that you've installed is now under there And then of course the ability to to search all of the modules now these are installed modules There is a different there. I'll show you the marketplace here in a minute but the marketplace and modules are Similar in nature in the kind of information that you're going to give you but it's important to remember that one of them is remote and one Of them is local. So marketplace is going to be everything remote everything that's out on the remote module marketplace Whereas the modules command command is going to be interacting locally Okay So these are the things that you've installed whether you've pulled them off of the marketplace or whether you've installed modules locally like Custom modules you've pulled from somebody else's github repo or you developed yourself or something like that Those are going to show up here So you have the ability to search those and I believe the search Here Yep, it allows for regular expressions there So it's a little bit more of a little bit more powerful search engine than it used to be And then of course it still has the smart loading feature as well We don't have anything here, but if I go to the modules load and then I give it You know a word like PON If there's no modules installed with that name it's going to say, you know invalid module name However, if there are more than one modules installed with the name Poned then it'll just list those for me and then I'll have a more a smaller list of Items to choose from and then I can see the paths that I'm looking for and I can load them more specifically Otherwise if there's only one module that this particular provided string matches, then it just loads it Right, so it's got that smart loading feature that's been there for a long time But it's still there and it exists in a couple other places as well But I'll show you I hear a few minutes and that's that's loading Yeah, so there it is So that's the modules command Dashboard some of you remember the old show dashboard command basically I just moved that into its own And I think it's because you know I may have the ability to expand this at a later time to do more with the dashboard as you can see right now We have no activity in this particular workspace Obviously this populates with some tables of data when I do for those of you that have seen this before But just wanted to point out that the dashboard command is now a root level command and not a sub command of something else Okay, the next one is the script command So help script you may remember previously There was the the record command and the resource command and the record command was to start and stop Recording you know commands that you're putting into the framework So if you used to be able to hit record start and then type a bunch of commands in the framework record stop And then you'd have a resource file you'd have a script that you could then replay back And then there was the resource command that you provided that script to and it would execute it And it just made sense to me to consolidate the all those under one particular Root level command and I've done that now So you have the script command and underneath it you have the record which starts recording and give it a file name It starts recording to that file name. You can check this your current recording status You can stop recording and then of course you can execute the script that you recorded all under the script command So that's a that was a convenient consolidation as well Okay, so before I move on to the next one I did add another I can't show it to you right now because we don't have any modules installed Install one in a minute, and then I'll be able to show it to you But at the module context everything I've been showing you at this point Is that the global context and you can tell because you're right here You're in your workspace right your workspace prompt that puts you in the global context when you load a module This changes and you'll see the module name show up over here as well. That means you're in the module context There are some more commands. I've added there That I want to show you here in just a moment, but I can't write now But we will come we will come back to that so the old show command Which which was kind of a central point for a lot of things that framework did previously This is where you know show dashboard show options show modules show all that stuff All those all that output's been moved, right? All you know modules list options list so on and so forth Then now those commands kind of that that particular output is where it belongs The only thing that the only subcommands that are available for the show command are tables in the database Okay, so now the show command is strictly for just reviewing current data Just looking at the data. So you'll notice all of the different options you have here For these subcommands are tables within the schema there And so that's that's kind of the restricted usage for show now All that extra extraneous stuff has been pushed out to where it belongs under the proper root level command Okay, as I showed you some of the subcommands have been been renamed to so like if I you know This used to say like show options. Well if I look at the The Options subcommands you'll see I don't have options show I have options list and so some of those have been renamed I think under modules I also have a Sir I searched I think was there before I think this was either use or load. It's not only load There's no more There's no more use alias for the load command And so I just encourage you as you go through and you use it or your update in your content Make sure that anywhere you were referencing subcommands to make sure that's still the same. I think keys was one Yeah, I think she's used to be keys delete now. It's keys remove All right, so that's that's that's a particular change that has happened And yeah, just just keep them just keep an eye on those things Okay, so the other the other command in here that you that we mentioned was new is this marketplace command Okay, so this is the large part portion of the new functionality that exists Basically the whole idea behind Behind the marketplace was I wanted to decouple modules from from the framework For a couple different reasons one was was maintenance. I wanted to be able to give more than just me Right privileges to a repository which would allow allow some a lot of people to help me update and maintain these things Without me having to be the final say in everything, right? I'm still going to maintain that level of control over the core because it's a complex piece of code and to me It's pretty sensitive and I think there's places of it where it's fragile And so I don't want people making pushes to that without my final approval But as far as modules go I want to be a little bit more free with it And so this is going to give me the ability to do that The other thing it does is it is it reduces? I'm pretty I was pretty strict about adding a bunch of dependencies to the core And so having it decoupled like this now allows people to write modules that use whatever dependencies they want And I'll show you the impact of that here in just a little bit But I no longer have to have all these extra dependencies in the core of the framework You can just note which dependencies are required for your particular module and then anybody that wants to install it can choose Whether or not they want those dependencies and so it really gives the module developers a lot more freedom And then turns around and allows me to incorporate a lot more modules because that was one thing that was keeping me from Implementing a lot of modules was just people using all these crazy dependencies and complex code and all these There were neat stuff they were doing but it wasn't stuff. I wanted to bring into the core now that that's decoupled It's not an issue anymore So there's a lot of benefits to having this particular marketplace now How does the marketplace work? Well, let me show you For those of you that don't know when you start recon ng it creates this particular Folder in your in your home directory here So you said dot recon ng and now underneath dot recon ng you've got some things You've got the keys database which houses all of your API keys Which as a side note if you're ever looking I've had people ask me You know, how do I get my keys from my old recon ng to this other system because I've changed computers so on and so forth? Just take that file and move it. It it is completely separate from your workspaces It is a root level recon ng file Just move your keys database to the new system the in the same place in the new system recon ng will pick it up And will and will and you'll have all your keys that you had from the previous system there So that's kind of a nice feature. I'm you'll have the modules directory. We'll talk about that here a second Modules dot yaml and then you have all of your workspaces So under your workspaces you have your individual workspaces, but modules where I want to key in when you install modules via the work via the marketplace They'll show up in there as you can see it's empty right in fact I'll go in there just to kind of make it look a little bit You can see it's an empty it's an empty directory and no that's where they'll be installed in there Okay, and now I'm gonna come back here and show you after we install one where they populate But this is gonna actually start to build a directory tree in there and then when you remove a module it goes in there And it removes it and then as a part of the removal process if it finds any empty directories It removes those as well So you could potentially remove all modules then remove all modules and this directory be completely empty again It doesn't leave any artifacts behind and so it's it's kind of nice in that regard But this is where that we install them and I'm gonna come back and show you why that means something here in just a few moments Okay, so let's go and let's look at At the marketplace, so let's do a help Marketplace you can see here. I've got a couple of options. I got the info install refresh remove and search so The refresh command basically when you saw the stealth option which disables the marketplace And then the reason why it does that is because when you start up recon and G The one of the first things it does it makes that new version check And then it reaches out to the marketplace and it pulls back an index file That's hosted there and that index file is cached locally on your system so that you can very very quickly Look at all the available modules that are there Well, if you leave recon and G open for long periods of time then potentially, you know The the modules that you know, we're working with and updating and adding to the marketplace could change And so you could come in here do a marketplace refresh and it refreshes your local index of the marketplace now that Happens automatically when you start recon and G so if you're constantly in and out of the tool You don't leave it open when you're not using it then you're fine You're gonna mark places gonna refresh every time you'll be good to go But that's what that particular thing is for and then I'm stall installing and removing I'll show you those in a moment pretty self-explanatory Info I show you in a moment and then search now search is kind of where you're gonna start things So let's see here marketplace search Put in some garbage there. You'll see hey it searched modules not found But we're really what I was trying to get to is this help here. So basically Marketplace search regular expression So you can give it a regular expression here and then it'll list all of the all the modules that match that regular expression So obviously everything is it is it everything has something in it? So regular expression for dot and I believe the the brackets mean it's also optional So if you just do a marketplace search and then you give it nothing It'll list all of the modules and the marketplace So let's look at the information that's available here. You have the path, which is essentially the unique name And where it's going to install within the modules directory for that particular module You have the version the version of the module I mean all of these unless they were explicitly versioned previously We set them all to 1.0 and we release the marketplace Whether or not is installed and this is actually this status goes farther than that. It'll say not installed installed disabled And I'll explain what disabled means or or out of date So it'll also tell you when it's out of date, which is kind of nice And then there's the updated field which tells you the last time that that particular module is updated now What's the difference in version and updated right? I mean they're both gonna change at the same time all the time Yes, yes, they will the reason why I put the updated thing in there It's kind of nice to be able to to see you know if you haven't used recon ng for a month or two You can quickly rather than trying to remember which version it was on last time you you you you listed the marketplace You could just look at the data was updated and say oh that was done three weeks ago I haven't used the tool for two months. So something's changed there I need to It's I want to go and look at that one a little closer to see if it's added a feature or maybe interested in or so One and so forth then there's this DK column and K column I abbreviated those just to save us some space on the table here But basically D means it has dependencies and K means that it requires a key and then notice it says see info for details Well that info should look familiar. That was one of the other sub commands Okay, and so if you found a module that you'd want to install say something like Well, I guess the one of these point of ones has both of these so say we want to we want to look at some information about this here This also has the smart loading feature, so I'm going to show you this if we do like a marketplace search Okay, so as you can see there, I'm gonna did a marketplace search for poneless and The smart search kicked in or the yeah smart search kicked in and said hey look I've got you know six different modules that work there that will also apply to Info okay, so if I want to see you know info You know if I was looking for info on on poneless to count creds, and you know I just ignored the rest of these and said well, I just use the smart feature It's gonna show me info for all of them And then of course you can you can drill down and and just do the one that you want as well So if you want to be a little bit more specific in our smart load, that should be the only module that matches So info poneless and then we see the info on that one there Of course, it's an ASCII table, so it looks a little bit ugly here, but there you see Required keys. There's the required keys for that dependencies. There's required dependencies And now you know which keys you need to go grab beforehand And you also know which dependencies you need to install before that particular module will work Okay, now if you install one of these and then you go to Run it that's where you're gonna start to see some of those errors if you've not satisfied this or you've not satisfied this It's gonna say hey look, you know I don't see a key for I you know a particular You know in fact, I'm gonna think I'm gonna show you one of these here in just a moment. Yeah, we'll go ahead and do that now I'm gonna go ahead and install a module that I know requires it. Let's take a look Make sure Doesn't say it requires it as I think because we're still working on that one. Let me try this one So we want to start install a module we got a marketplace install And I'm gonna use the smart discovery feature and it installs it there. So now if I do a modules list Or actually sorry search You'll see there's member. Remember, this is the local marketplace commands for remote Modules commands for local here. You can see I have an installed there and it should it already reloads Sorry, it's not a valid command anymore I'm getting used to my own command structure It loads just fine. So that's obviously not that's obviously one that looks like it's gonna function properly Let's go and look at something else that Requires keys here. So I've got keys for all these though. So I'm not enough and I don't know I'm gonna be able to show you that particular error I could probably get all the dependencies to for that matter Yeah, I do so but regardless and I've got all the dependencies and all the keys installed for all of these because I've been developing on those But if you don't the framework will handle that gracefully So when you go to install a module and we go ahead and I'm gonna go ahead and show you the marketplace You can see that the status for them is some of these has switched to installed Okay Now if you don't have a dependency in place that's required then the module will still install But it'll say it's disabled here and I won't allow you to invoke it until that dependency exists Now as far as the dependencies go it's on it's up to you It's up to the user to actually install those dependencies on their own So they have to use the info command to look and see what dependency is required and then go install it And then if you go back to the wiki I've got some guidance there about you know how to go about doing that command by command and We are recommending the uses of a virtual environment for econ ng so that you can add and move modules without impacting the global install of your python Python so You know that's there are some good ways to do some housekeeping there But the framework is going to let you know whether or not you've got that install Whether you've got the right dependency there and it'll tell you it'll disable it if it's not there now If you have all the dependencies in place and you just don't have the requisite key It's still going to install correctly and it's going to stay installed because as far as the module is concerned It's in functional condition at that point in time What's going to happen though is when you try to load the module The the framework will look inside of your keys to say hey, do they have the keys? Set that are required for this particular Module and if you don't it'll say hey look you don't have this key set chances are it's not going to work on run time And if you actually go to run the particular module because it's still going to let you run If you go to run that particular module it's it's going to It's obviously going to fail. It's going to you're going to get some sort of Unauthorized or unauthenticated error from whatever service you're trying to access there So so I've broken that out tried to give you some context as to what to do there How to go about you know looking into these particular modules whether or not you want to install them and what information is needed Okay Now what if you want to use custom modules like how would you go about doing that if you wanted to use custom modules? That's where we go back to the directory structure um as I told you This is going to be the directory That uh, this is going to be the directory here your home folder slash dot recon ng slash modules where modules are going to be installed So if I do a listing here, you'll see that I have my My my stuff listed in there, right? I mean you can see I have all there all my modules are actually sitting this particular Well, all you have to do is within this particular folder is create another Um is create another folder that's just not named one of the root folders So, you know one of the root folders in the directory. So you've seen a recon Um discovery exploitation and so on and so forth. So you could create something like A custom and I'm going to just pull up a previous command here where I did this Right where I'm going to make a I'm just making a symbolic link in this particular folder called custom Which points to some folder where I have a bunch of custom modules. And so when I do that Now within here, not only do I have my recon folder, but also I have my custom folder Which is here pointing out to others uh pointing out to another folder elsewhere on the system But it could be just a folder that's sitting right here. And now within the framework if I do a modules reload You'll see it reload and of course I got some errors on these because whatever these custom modules are I've not been Updated or anything. They've been there for a long time. I'm just ignore the errors We'll talk about errors again here in just a moment, but if I go to modules Search and just kind of show you here you see uh, there's all my custom modules the actual ones that are loaded All right, so I have two of them that successfully loaded from the custom folder two of them that failed and I got errors here Um, and then I actually have um, and these actually are there. They're just disabled And then I have those that I've actually installed from the marketplace itself If you go and you install uninstall everything from the marketplace. So if I go marketplace Um, sorry not uninstall remove all which is going to remove everything from the marketplace You see it removed only the two that I installed from the marketplace And it reloaded the modules so that we've got a current module Context for the framework and you see these errors Which is kind of hinting to what I was getting ready to show you now The only thing that got removed were the things that were installed by the marketplace all your custom stuff is still there and is still intact Okay, so I want to make that uh, make that so you can so yeah It's really nice really easy way really easy to have your custom modules exist right next to Your installed modules and everything just works as you would expect it to so I'm going to go ahead and remove this symbolic link here And I'm back to no modules so back to the framework So that's the marketplace. Um And I think that's everything that I wanted to cover there now as far as error handling goes the last thing I want to talk about before I end the video. So I have improved error handling So I'm going to install a couple of modules that currently I know currently have some errors that'll help me uh Um help me invoke this. So let's do marketplace install Transparency is it's a certificate transparency module? Okay, it did marketplace install Um Who is minor and there may be more than one of those. Oh, no good. They're just one. Okay, cool. So All right, so we've got a couple of different modules here that I want to load and show you So I'm going to go ahead and load the certificate transparency one first so module Load And once again, you notice. Hey, wait a second. That doesn't look like a valid path member smart loading use it everywhere Smart loading is anytime you're loading a module installing a module removing a module that smart loading feature is really really nice I encourage you Um to use that I also encourage you to use tab completion because it just makes things so much easier I watch videos of people that are literally typing out every letter having a backspace because they mistype things Just use tab complete. It makes life so much easier. It exists throughout the entire framework So now Before I show you how I'm doing some improved error handling here I do want to go back and show you what the with the options look like for the module context Now a lot of commands are shared between both the global context on the mod and the module context dashboard db All those look pretty similar keys modules options Right, so a lot of the script most of these look the same There's a lot of overlap. However, there are some new ones such as goptions. And so what goptions does is Is it will? it will list The current global options right you can't modify these yet From from the from the module context, but you can at least see what you have those configured as and so That's kind of that's kind of a nice feature and I may expand this as we move forward The info command, which I think used to be under show info has now been pushed to the root This actually will show you detailed information about the modules. So you have all the metadata, right? You have the author and the version a description and then you have The list of the options and then this is uh You know some some notes about what this source option can be and then any comments left by the developer So this is a super helpful This is a super helpful Command for understanding what that module does and this is what we're going to be testing here in just a moment There's a little warning there from the developer. So this is actually one of the reasons why I incorporated some of the better air handling But getting back to getting back to these commands Info input will give you the ability to very quickly see what exactly you've got what exactly you have going into the module And so up here when we listed options as the source command and by default right now We don't have it working on anything. So Because there's nothing in the database see the default option is this query here Which is preset by the developer We're going to go ahead and use this particular option here And define a specific source so that this module actually work because otherwise if we try to run it It's going to tell us hey source contains no input so Let's go ahead and do that so options sets source yahoo.com because it's a big one And now if we do info You can see it's yahoo.com So now we have a source set So now I can show you what inputs does input will list out You know what the input's going to be because sometimes you're going to be using some of these more complex Whether it be a path to a file or whether it be an actual custom query You use some more complex sources of input for a particular module when you do that You may want you rather than run the module and see what it's actually processing you can run this command to see what What the framework's going to do with which you go give it here And and what it's actually going to pass to the module to to transform Into new data. So so it's just a good a good a good module to check on yourself before you actually end up running the module So there's that it's inputs what other things have changed and that's it other than just I think run was always there So those are the new ones at the module context. So then once again, this is that second context There's the global context the module context. There's a lot of overlap But there's also some different commands at each one of those notice the marketplace command doesn't exist here Because the marketplace is only meant to be used from the global context All right, so let's go ahead and get back to this more graceful error handling stuff that I wanted to talk about if I run this Here, um, this is going to take a while and I think my default is 10 seconds and yaho should take longer than that with this module And it should fail out Okay, so if it fails out, uh, I'm capturing capturing a couple of different exceptional conditions in the code now before I wasn't And you would just get this ugly thing right here and you'd be like, oh, what's that? And how do I deal with it? I'm gonna have to modify the module and make sure I give the requests You know, you know more time or whatever a lot of people don't realize that there's a global There's a global option for time out for this exact reason. So if I list the global options, you'll You'll see Right here and it's default to 10 seconds Well, if you're using a module that's taking too long rather than just give you this ugly error That doesn't really give you much hints. I'm actually going to give you a new custom error specifically for this exception Type that says, hey, look, a request took too long to complete if the issue persists Increase the global timeout option So now you've got a little bit more help with regards to anything that Anything that is impacted by the globally set timeout Okay, um, the next one is just crashes in general, right? And I think I've got a module here. Yeah, the who is minor is broken So let's load it up. Okay, and if I just try to run this And so now if if you do run it to an An error like you're not left without without some sort of guidance here And so basically it says hey something's broken, which means I have detected, you know, within the framework I have actually detected an exception that made its way all the way out of the module two back to the framework And I've captured that and said, okay, something's definitely wrong here See this particular place of the wiki For troubleshooting and then ultimately issue reporting if there's a problem And so on the wiki I have and we'll and we'll continue to to add some troubleshooting tips for both the framework and modules And then ultimately if if the troubleshooting tips don't help some proper guidance on how to actually File an issue with us for that particular module to be fixed So as far as as far as error handling goes things have been approved a little bit there Okay, and so that pretty much that pretty much covers everything that I wanted to cover I'll leave you with this beautiful banner here right here But I'm going to go ahead and stop the video for now, but I would I just want to you mention again If you're maintaining course material Or something along those lines or or updating a book or something like that These are big changes and and these are essentially breaking changes for anybody that's written pretty little scripts or have learned Learned how to use this tool through one of your training courses So I would encourage you please Please update your stuff Get the word out And if you have any questions at all Feel free to to hit me up and and I can go into more in depth on a particular topic or or answer any specific questions that you have But otherwise, you know, I hope you enjoyed the video and I hope it helps And go forth and do get a recon