免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3701 | 回复: 8
打印 上一主题 下一主题

shell下端口问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-27 15:02 |只看该作者 |倒序浏览
大家好!我是一名初学者。想用shell实现一个功能。
系统:redhat linux9
实现的功能:
    运行shell程序可以查看本地系统都有那些端口被打开(也可以自行输入某个端口看有没有打开),将最终结果保存一个文件当中。
目的:在不良的系统侵入中,可以迅速找到打开的端口。
谢谢大家!!!!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2007-01-27 15:06 |只看该作者
namp localhost

论坛徽章:
0
3 [报告]
发表于 2007-01-27 20:50 |只看该作者
原帖由 寂寞烈火 于 2007-1-27 15:06 发表
namp localhost

nmap?

论坛徽章:
0
4 [报告]
发表于 2007-01-27 21:38 |只看该作者

nmap localhost

谢谢大家!我知道可以用nmap localhost,但我希望能用一个shell实现。

论坛徽章:
0
5 [报告]
发表于 2007-01-28 03:09 |只看该作者
原帖由 ids_company 于 2007-1-27 21:38 发表
谢谢大家!我知道可以用nmap localhost,但我希望能用一个shell实现。

如果你用root权限的话

mknod /dev/[tcp|udp]  c  [主设备号]  [从设备号]
接下来就用一个小循环不停的换端口
for i in $(seq 1 888
do
exec 5</dev/[tcp|udp]/[localhost主机]/[$i端口]
在这做端口是否打开处理
exec 5<&-
done
一般如果端口没有使用的话它会出错判断它的退出状态
^_^可是错误就没有办法屏闭掉如果你不介意的话去改bash的连接socket的错误处理语句

论坛徽章:
0
6 [报告]
发表于 2007-01-28 10:04 |只看该作者
对lovesaka兄的话有些疑问
  1. mknod /dev/[tcp|udp]  c  [主设备号]  [从设备号]
复制代码

它的用意是什么?重定向/dev/[tcp|udp]/host/port只是shell建立socket的一种方法,而/dev/[tcp|udp]/host/port此设备本是不存在的。那么您mknod取的主从设备号又是取哪个设备的呢?我认为此句画蛇添足。

上面是疑问,下面是建议:
  1. exec 5<&-
复制代码
可以放到循环外。

屏蔽错误输出可以用屏蔽time输出的方法
  1. ( exec 3</dev/tcp/localhost/$i ) 2>/dev/null
复制代码

[ 本帖最后由 一梦如是 于 2007-1-28 10:05 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-01-28 19:57 |只看该作者
原帖由 一梦如是 于 2007-1-28 10:04 发表
对lovesaka兄的话有些疑问
  1. mknod /dev/[tcp|udp]  c  [主设备号]  [从设备号]
复制代码

它的用意是什么?重定向/dev/[tcp|udp]/host/port只是shell建立socket的一种方法,而/dev/[tcp|udp]/host/port此设备 ...

If bash was compiled with --enable-net-redirections, it has the capability of
using a special character device for both TCP and UDP redirections. These
redirections are used identically as STDIN/STDOUT/STDERR. The device entries
are 30,36 for /dev/tcp
这句话是在abs上看到bash在2.0或者更2.0以前是要加上--enable-net-xxxx选项编译才会支持连接socket的功能它会在/dev下建立相应的字符设备目的是为了像标准输入标,准输出,错误一样可以有重定向功能
我自己也试了试发现并不像abs所说的那样其实/dev/tcp/host/port只是bash命令行获取连接的套接口类型主机端口号的信息一种型式而已
而建字符设备的确是多余的这是在高版本里,而老版本bash呢这我一无所知
我认为在循环里关闭描述符原因是如果bash是在创建子进程前打开的描述符那么子进程结束过后连接仍然没有关闭只有在bash收割子进程时或者子进程或bash显示用shutdown这条连接才会完全关闭如果是在创建子进程之后打开的把关闭描符也不会有什么问题
但是如果放在外面的话那第一种情况就会出现大量未关闭连接直到bash收割子进程时才关闭(如果是在第二程情况那就不存在,还有在被扫描主机端口很少时很难看出这种差别我想的也不一定是正确如果有错还请指出)
用watch -n1  lsof -i 4 -a -n -P -u UID或者tcpdump -n -v tcp 还有watch -n1 netstat -taun可以看看
( exec 3</dev/tcp/localhost/$i ) 2>/dev/null
不错想半天没想出招来学习了^_^

论坛徽章:
0
8 [报告]
发表于 2007-01-28 20:53 |只看该作者
直接在交互shell下
  1. exec 3</dev/tcp/localhost/80
  2. exec 3</dev/tcp/localhost/25
  3. lsof -p $$
复制代码


我开了httpd和sendmail服务,因此80和25端口有响应。
可以看到当前shell只打开了25这个端口。
原理上也没错,没有fd,内核就无法保持打开的文件。所以exec能够重复在一个fd上打开文件的原因必定是shell默认先关闭该fd,再在此fd打开重定向的新文件。而exec 3<&-也就画蛇添足了,因为exec重定向的过程不管fd是否打开一定会执行关闭fd那段代码。
8000次exec 3<&-在我的PC上执行0.1-0.2秒,的确不算问题。只是我觉得它放在循环外面让人感觉更完美(偶是完美主义者~)

[ 本帖最后由 一梦如是 于 2007-1-28 21:02 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-01-29 01:01 |只看该作者
如果出于效率的话还是选择工具的好shell不怎么合适做这个^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP