Delphi下端口复用的实现

其实端口复用听起来很深奥的技术,其实很简单,简单得只需要一个函数就可以实现: 
  setsockopt( SOCKET s, int level, int optname, const char FAR *optval, int optlen );  
  参数: s Socket 的识别码,level选项设定的 level ,optname   选项名称 ,optval   选项的设定值 ,optlen   选项设定值的长度。 
  我只说一个参数,就是选项名称的其中一个选项SO_REUSEADDR,稍微会一点英语的和有一点计算机基础知识的都知道,这个选项后面的意思就是“重复使用地址” 
  我这里把实现端口复用的代码给出来,并给新手朋友们解释一下: 
var 
sobinyshuai : bool; 
myIP : string; 
PORT : integer; 
ServerSocket : TSocket; 
SockAddrIn: TSockAddrIn; 
WSAData: TWSAData; 
begin 
myIP:=’123.123.123.123’;{你自己的IP,为什么要这个,下面会说}  
sobinyshuai:=TRUE;   {这句话的意思是,sobiny帅,赋值是肯定的回答。呵呵,开个玩笑。} 
WSAStartUp(MakeWord(1, 1), WSAData); 
ServerSocket := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0); {建造一个TCP的socket。} 
setsockopt(ServerSocket, SOL_SOCKET, SO_REUSEADDR, @sobinyshuai, sizeof(sobinyshuai)); 
{设定socket的状态,还是关键的这一句SO_REUSEADDR,允许端口重用} 
SockAddrIn.sin_family := AF_INET;         {设置这个连接的,我都还不晓得有另外的选项没,不过好象一直用这个。} 
SockAddrIn.sin_addr.s_addr:=inet_addr(myIP);   {设置这个连接的IP,这里可以是INADDR_ANY这个选项,不过要是是INADDR_ANY的话,所有的外部的连接都会是这个,不过要是你复用的80端口,设置INADDR_ANY的话,后果可想而知。当然你程序要是辨别数据包当然没问题} 
SockAddrIn.sin_port := htons(Port);     {设置这个连接的端口} 
Bind(ServerSocket, SockAddrIn, SizeOf(SockAddrIn));{设置ServerSocket的属性吧,应该这样理解} 
Listen(ServerSocket, 1); {设置监听,等待连接。在Accept前只接受一个连接} 
…… 
end; 
  端口复用就说完了,就这么简单,如果要加上什么功能的话,请在邪恶八进制里面搜索一下我发的“综合小工具”的源代码,把里面命令提示符,注册表模拟等你喜欢的东西复制过来就可以了。这个文章说白了还是必须要有一点点程序基础的朋友看的(各位超级新手的话,还是用别人的软件好些。)我全用的是API的函数,稍微变形一下就可以在C++下用。 
有3个PAS:Windows, Winsock2, Winsock; 
其实我想端口复用的问题并不是想写什么黑客软件,而是那天夸下海口说只需要利用一个webshell就实现各内网间的UDP通讯息,就必须涉及一下端口的复用,不然咋能行呢,如果有知道能UDP访问HTTP的朋友一定告诉我方法。呵呵,先谢谢。 
  现在又有一个想法提出来,希望高手来指点一下:就是偷袭serv-u的方法,在找不到目录,注册表不能导出用户的时候,偷袭serv-u.我是这么想的:因为在sendmessage给窗口可以发送消息,经过实验发现,serv-u的各个窗口都可以发送WM_SETTEXT改变文字,并且可以给执行权限那里发送点击的信息,再给应用那个按钮发送点击的信息,得到各个盘的控制权限,或者马上通过serv-u设置系统管理员帐号(如果serv-u有这个权限的话),不过问题就是,必须要管理员打开serv-u设置用户那一栏的时候,才能够行得通。测试的时候在本机GUEST权限下,这个程序是行得通的,直接又加了一个管理员,就是不知道在webshell下的执行效果会怎么样,如果有条件的朋友可以试试. 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tiny_Shell 0.1 (普通版本)By Anskya某天精神好了一点的时候写的,使用KOL+删除多余资源+清除PE重定位表+FSG压缩体积只有3k.感谢那些提供Code和教程的GG and JJ们~~ ^_^~部分代码直接翻译C的shellTiny_Shell.dpr 工程时最简单的shell采用匿名单管道设计,本来打算不用管道直接写的,但是怕连目录都无法显示所以还是用了单管道,有个BUG-很明显的那种-就是,输入命令看不见但是可以运行,有兴趣自己改成双管道就可以了(如果不怕自己麻烦部使用管道直接将Socks获取的信息直接写入进程,也可以返回数据的^_^).最好不要这样作很麻烦的说。身体不好要睡觉了,就不多写了.Tiny_Shell2 0.1(端口绑定版本)By AnskyaTiny_Shell2.dpr 从0.1普通版修改的~只修改一点点Code~呵呵懒得写代码端口绑定原理是从C的shellcode Debug出来的^_^默认是绑定80端口(如果没有找到这个端口就自己创建80端口。。。。),IP约束中的IP是为了防止任何人都连接上shell,这个地方可以改进一下,这个仅仅是演示版~要与实际开发结合还有好多问题存在。哈~嗯。。。自己看代码吧~最好对照着MSDN看,其实端口复用没有什么神秘的都很简单,系统本来就提供的功能。。口误。。不多说了。自己看吧,又要睡觉了。呵呵。。雨楠生气就不好了。(EVA X爆走:雨楠饰演~第X号使徒:Anskya饰演完全沉默了)有什么好的想法或者修改了此代码请发送在下(用词失误)一份。呵呵,又要吃药了(至少20粒)。555~~QQ:115447(加我请注明来意。呵呵。)寻求骨髓捐助者一名(不限制条件~本人AB型血支持任何血型)QQ:115447Email:Anskya@Gmail.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值