Ubuntu下指令-查看端口的占用情况以及抓包
来源:互联网 发布:瞩目视频会议软件下载 编辑:程序博客网 时间:2024/05/21 09:10
linux下可以通过netstat来查看某个端口的占用情况。但是笔者今天看到别人用指令抓取报文数据,并打印。之前只知道wireshark可以抓取,哪知,linux已经集成此功能。好吧,笔者果然孤陋寡闻了。
先来列举下,笔者的目标
1 通过netstat,查询某个特定端口的使用情况,查询结果中包含某个关键字的记录
2 通过linux的命令,抓取报文,并以16进制的方式打印出来。
1 netstat
关于netstat,笔者也在网上找了找,整理了一下对我有用的指令:
-a 显示所有项,我一般用netstat必跟-a
-n 将能显示成数字的显示成数字,比如 Local Address,若不使用-n,有可能显示的是你的机器名;但使用-n,则显示的是127.0.0.1
-t 显示所有tcp的
-u 显示所有udp的
-p 显示程序名以及pid
笔者使用的是ubuntu,直接使用netstat,会显示两端内容,前面这一段是我需要,后面还有一大段内容,网上有说是linux内部端口,据说传输的效率高一倍,笔者并没有验证过。
netstat > 1.txt
以下为1.txt的内容(部分内容,后面unix的那一段实在太多了)
激活Internet连接 (w/o 服务器)Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.0.110:53462 192.168.0.1:netbios-ssn ESTABLISHEDtcp 0 0 192.168.0.110:40288 a184-50-91-58.dep:https ESTABLISHEDtcp 0 0 192.168.0.110:33104 101.201.173.115:http ESTABLISHEDtcp6 32 0 [未知]:39838 a184-50-91-58.dep:https CLOSE_WAIT 活跃的UNIX域套接字 (w/o 服务器)Proto RefCnt Flags Type State I-Node 路径unix 2 [ ] 数据报 20915 /run/user/1000/systemd/notifyunix 3 [ ] 数据报 13090 /run/systemd/notifyunix 2 [ ] 数据报 13095 /run/systemd/journal/syslogunix 17 [ ] 数据报 13096 /run/systemd/journal/dev-logunix 7 [ ] 数据报 13110 /run/systemd/journal/socketunix 3 [ ] 流 已连接 1578283 unix 3 [ ] 流 已连接 1577660 unix 3 [ ] 流 已连接 15666 /run/systemd/journal/stdout
well,现在笔者暂时用不到unix域套接字这一块儿,那么暂时忽略掉吧。
好了,那么对于笔者而言,经常要差udp和tcp的端口占用情况,那么以下两条命令是我最常用的
netstat -antp 和netstat -anup
那么有没有什么办法tcp和udp的一起查呢,当然有,那就是
netstat -anutp
哈哈哈,大笑3秒
笔者用java写了一个tcpserver,代码如下:
public class TcpServer {public static void main(String[] args) {try {ServerSocket server = new ServerSocket(9001);while (true) {Socket s = server.accept();InputStream in = s.getInputStream();byte[] buffer = new byte[16];while (in.read(buffer) > 0) {System.out.println(new String(buffer));}}} catch (IOException e) {e.printStackTrace();}}}
不用纠结为啥要这么写,我仅仅是为了,占用端口9001而已,然后运行程序
执行netstat -antp
确实,有了对9001端口的监听,且监听类型为tcp6,状态为LISTEN,不过,这个 ::::9001看起来似乎有点奇怪
首先,tcp6是个什么鬼,还有就是这种ip地址,又是个什么鬼。看长相,大概是ipv6吧。
那么,笔者将serversocket的代码改为:
ServerSocket server = new ServerSocket();server.bind(new InetSocketAddress("127.0.0.1", 9002));然后运行程序,再执行 netstat -anutp:
至少,ip地址这回正常了吧。
ok,那么在实际的操作中,我可能会有一个需求,要查询对9002端口的使用情况:
netstat -anutp|grep 9002
well done,至此,netstat已经能解决笔者现阶段碰到的所有问题了。
2 通过linux的命令,抓取报文,并以16进制的方式打印出来。
大名鼎鼎的tcpdump.炸一看,似乎tcpdump只能抓tcp的包,hehe,其实不是,他也可以抓udp的包的。
###tcpdump
可以看到的是,我并没有权限,切换下用户,然后在#tcpdump会看到一堆东西,笔者表示看不懂
查看版本号###tcpdump -h
如果,tcpdump没有按住那该的话,可以去搜索下是如何安装的,笔者这里就不详述了。
笔者的目的是,监听刚刚作为服务器的9002端口的数据。
嘿嘿:
tcpdump -i any -nn ‘port’ -nn 'port 9002' -vv -X
ok,这就是我想要的,我监听了9002端口,监听到收到的数据的hello world,同时也看到从9002端口发送到56564端口的响应包。
哦,值得一说的是,为什么我的serversocket可以收到helloworld呢,因为,我写了一个socketclient,往9002上不断的发hello world。
socketclient:
public class TcpClient {public static void main(String[] args) {try {Socket s = new Socket("localhost", 9002);OutputStream out = s.getOutputStream();while (true) {out.write("hello world".getBytes());out.flush();try {Thread.sleep(10 * 1000l);} catch (InterruptedException e) {e.printStackTrace();}}} catch (IOException e) {e.printStackTrace();}}}
好了,最后来解释下命令 tcpdump -i any -nn 'port 9002' -vv -X
-i interface,网卡的名称,后面可以跟具体的网卡名称(ifconfig后者tcpdump -D)获取,笔者的电脑上看到any,似乎是指所有的网卡
-nn 监听host或者port名,这个网上解释有一大堆,什么src host,dist host ,比如我要抓,ip地址为127.0.0.1,端口为9002的服务器的数据包,那么命令可以写成-nn 'src host 127.0.0.1 and port 9002'.不过实际来讲,端口肯定是被一个ip地址使用的,而且对于我来说,服务器抓包比较有意义,所以,其实有没有ip地址,似乎显得不那么重要,有端口就可以。
-vv 详细信息
-X 以16进制的格式输出
小结,对于笔者而言,死记上述命令即可。
收工。
- Ubuntu下指令-查看端口的占用情况以及抓包
- Ubuntu下查看端口占用情况
- linux下查看端口的占用情况
- linux下查看端口的占用情况
- windows下查看的端口占用情况
- ubuntu查看端口占用情况
- ubuntu 查看端口占用情况
- Ubuntu 查看端口占用情况
- linux以及windows下查看端口占用情况
- 查看端口的占用情况
- Linux查看端口占用情况,以及已启动的进程
- 朝花夕拾:端口占用情况的查看以及控制
- netstat用法以及查看端口占用情况
- 查看端口占用情况并kill[ubuntu]
- 在windows下查看端口占用情况的命令
- 查看Linux下端口占用情况的命令
- WinXP下查看软硬件端口的占用情况
- 如何在WinXP下查看软硬件端口的占用情况
- LeetCode #57 | Insert Interval
- NYOJ-305-表达式求值(第四届河南省程序设计大赛C题(模拟+栈||递归)(sscanf函数的应用))
- ios控制器之间传值-单例传值
- Oracle insert大数据量经验之谈
- Docker的使用--制作自己的镜像(四)
- Ubuntu下指令-查看端口的占用情况以及抓包
- 使用MVP+Retrofit+RxJava实现的的Android Demo (下)使用Retrofit+RxJava处理网络请求
- Laravel5.2版本后更新的中间件组部分
- Java实现动态代理的两种方式
- 初识docker
- cpu load过高问题排查
- 菜狗的C++ primer读书笔记:第七章 类
- Android studio 启动自学模式
- QT5.7操作word