java编写一个端口扫描器
好久没写java了,学的时候,也没学习网络编程这一块,无意中看到了一本书,于是小小复习一下java,写个端口扫描器,玩玩吧,网上这种小公具有的是,就是自己无聊写着玩玩。
源代码如下:
共两个类,比较简单奥
import javax.swing.*; import java.awt.Dimension; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.*; public class PortScan extends JFrame { JPanel center=new JPanel(); Box hBox0=Box.createHorizontalBox(); Box hBox1= Box.createHorizontalBox(); Box hBox2= Box.createHorizontalBox(); Box hBox3= Box.createHorizontalBox(); private JLabel state=new JLabel("关闭"); private JLabel HOST=new JLabel("主机名:"); private JLabel PORT=new JLabel("端口号:"); private JLabel STATE=new JLabel("状态:"); private JButton btn1=new JButton("开始扫描"); private JButton reset=new JButton("重置"); private JTextField host=new JTextField(20); private JTextField port=new JTextField(7); Font f1=new Font("隶书",Font.PLAIN,15); public static void main(String[] args) { JFrame portscan=new PortScan(); portscan.setVisible(true); } public PortScan(){ setTitle("PortScanner"); setSize(300, 200); center.setLayout(new BoxLayout(center,BoxLayout.Y_AXIS)); Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize();//获取屏幕分辨率 setLocation(screenSize.width/4,screenSize.height/4);//位置 state.setFont(f1); HOST.setFont(f1); PORT.setFont(f1); btn1.setFont(f1); reset.setFont(f1); STATE.setFont(f1); center.add(hBox0); center.add(Box.createRigidArea(new Dimension(10,20))); center.add(hBox1); center.add(Box.createRigidArea(new Dimension(2,20))); center.add(hBox2); center.add(Box.createRigidArea(new Dimension(2,20))); center.add(hBox3); hBox0.add(HOST); hBox0.add(host); hBox1.add(PORT); hBox1.add(port); hBox2.add(btn1); hBox2.add(reset); hBox3.add(STATE); hBox3.add(state); add(center); btn1.addActionListener(new MyActionListener()); reset.addActionListener(new MyActionListener()); } class MyActionListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { String post1=host.getText(); int port1=Integer.parseInt(port.getText()); if(e.getActionCommand()=="开始扫描"){ if( PortScannerByIP.scan(post1, port1)){ state.setText("开放"); }else{ state.setText("关闭"); } } if(e.getActionCommand()=="重置"){ host.setText(""); port.setText(""); } } } }
import java.io.IOException; import java.net.Socket; public class PortScannerByIP { public static boolean scan(String host,int port){ boolean flag=true; Socket socket=null; try { socket=new Socket(host,port); return flag; } catch (IOException e) { flag=false; return flag; }finally{ try { if(socket!=null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
运行截图: