java模拟UAS发包
来源:互联网 发布:agv磁条算法 编辑:程序博客网 时间:2024/06/05 23:53
import java.io.*;
import java.net.*;
public class sdpAbornamal {
private static final int PORT = 5060;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte receiveByte[];
private String receiveStr;
private String sipMsgString = null;
private String oldString = null;
private String Trying100 = null;
private String progress183 = null;
private String prack200OK = null;
private String ring180 = null;
private String ok200 = null;
private String invite = null;
public String getString(String sipMsg, String header, String strStart)
{
//String tempString = null;
int indexStr = 0;
int indexTagStart = 0;
int indexTagEnd = 0;
indexStr = sipMsg.indexOf(header);//"From:"
if(indexStr>=0)
{
indexTagStart = sipMsg.indexOf(strStart);//"tag="
if(indexTagStart>=0)
{
indexTagEnd = sipMsg.indexOf("\r\n", indexTagStart);
if(indexTagEnd<0)
{
indexTagEnd = sipMsg.indexOf(";", indexTagStart);
}
if(indexTagEnd>=0)
{
oldString = sipMsg.substring(indexTagStart, indexTagEnd);
return oldString;
}
}
}
return null;
}
public String sipMsg100Trying(String from, String to, String via, String callID)
{
Trying100 = "SIP/2.0 100 Trying\r\n";
Trying100 = Trying100 + via + "\r\n";
Trying100 = Trying100 + to + "\r\n";
Trying100 = Trying100 + from + "\r\n";
Trying100 = Trying100 + callID + "\r\n";
Trying100 = Trying100 + "CSeq: 1 INVITE\r\n" + "Content-Length: 0\r\n\r\n";
return Trying100;
}
public String sipMsg183progress(String from, String to, String via, String callID)
{
progress183 = "SIP/2.0 183 Session Progress\r\n";
progress183 = progress183 + via + "\r\n";
progress183 = progress183 + to + "\r\n";
progress183 = progress183 + from + "\r\n";
progress183 = progress183 + callID + "\r\n";
progress183 = progress183 + "CSeq: 1 INVITE\r\n" + "Contact: <sip:200@192.168.10.45:5060>\r\n";
progress183 = progress183 + "RSeq: 26048\r\n";
progress183 = progress183 + "Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,INFO,REFER,NOTIFY,SUBSCRIBE,PRACK,UPDATE\r\n";
progress183 = progress183 + "Require: 100rel\r\n";
progress183 = progress183 + "User-Agent: ZTE Softswitch/1.0.0\r\n";
progress183 = progress183 + "Content-Length: 0\r\n\r\n";
return progress183;
}
public String sipMsgPrack200OK(String from, String to, String via, String callID, int cseq)
{//PRACK sip:
prack200OK = "SIP/2.0 200 OK\r\n";
prack200OK = prack200OK + via + "\r\n";
prack200OK = prack200OK + to + "\r\n";
prack200OK = prack200OK + from + "\r\n";
prack200OK = prack200OK + callID + "\r\n";
prack200OK = prack200OK + "CSeq: "+cseq+" PRACK\r\n";
prack200OK = prack200OK + "Content-Length: 0\r\n\r\n";
return prack200OK;
}
public String sipMsg180ring(String from, String to, String via, String callID)
{
ring180 = "SIP/2.0 180 Ringing\r\n";
ring180 = ring180 + via + "\r\n";
ring180 = ring180 + to + "\r\n";
ring180 = ring180 + from + "\r\n";
ring180 = ring180 + callID + "\r\n";
ring180 = ring180 + "CSeq: 1 INVITE"+"\r\n";
ring180 = ring180 + "Contact: <sip:200@192.168.10.45:5060>"+"\r\n";
ring180 = ring180 + "Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,INFO,REFER,NOTIFY,SUBSCRIBE,PRACK,UPDATE"+"\r\n";
ring180 = ring180 + "RSeq: 26049"+"\r\n";
ring180 = ring180 + "Require: 100rel"+"\r\n";
ring180 = ring180 + "User-Agent: ZTE Softswitch/1.0.0"+"\r\n";
ring180 = ring180 + "Content-Type: application/sdp"+"\r\n";
ring180 = ring180 + "Content-Length: 146\r\n\r\nv=0\r\no=ZTE 143 14676 IN IP4 10.128.0.36\r\ns=phone-call\r\nc=IN IP4 10.128.0.238\r\n";
ring180 = ring180 + "t=0 0\r\nm=audio 20164 RTP/AVP 0\r\na=ptime:20\r\na=rtpmap:0 PCMU/8000/1\r\n\r\n";
//ring180 = ring180 + "Content-Length: 145\r\n\r\nv=0\r\no=ZTE 458 8606 IN IP4 10.128.0.36\r\ns=phone-call\r\nc=IN IP4 10.128.0.238\r\n";
//ring180 = ring180 + "t=0 0\r\nm=audio 18000 RTP/AVP 0\r\na=ptime:20\r\na=rtpmap:0 PCMU/8000/1\r\n\r\n";
return ring180;
}
public String sipMsg200OK(String from, String to, String via, String callID)
{
ok200 = "SIP/2.0 200 OK\r\n";
ok200 = ok200 + via + "\r\n";
ok200 = ok200 + to + "\r\n";
ok200 = ok200 + from + "\r\n";
ok200 = ok200 + callID + "\r\n";
ok200 = ok200 + "CSeq: 1 INVITE"+"\r\n";
ok200 = ok200 + "Contact: <sip:200@192.168.10.45:5060>"+"\r\n";
ok200 = ok200 + "Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,INFO,REFER,NOTIFY,SUBSCRIBE,PRACK,UPDATE"+"\r\n";
ok200 = ok200 + "RSeq: 1"+"\r\n";
ok200 = ok200 + "Require: 100rel"+"\r\n";
ok200 = ok200 + "User-Agent: ZTE Softswitch/1.0.0"+"\r\n";
ok200 = ok200 + "Content-Type: application/sdp"+"\r\n";
ok200 = ok200 + "Content-Length: 0\r\n\r\n";
return ok200;
}
public String sipMsgInvite(String from, String to, String via, String callID)
{
invite = "INVITE sip:"+from.substring(11+5,11+5+32) +" SIP/2.0" + "\r\n";
invite = invite + "Via: SIP/2.0/UDP 192.168.10.45:5060;branch=z9hG4bK69692f44ca701.0\r\n";
invite = invite + "To:"+ from.substring(5)+"\r\n";
invite = invite + "From: "+to.substring(4)+"\r\n";
invite = invite + callID + "\r\n";
invite = invite + "CSeq: 3632 INVITE"+"\r\n";
invite = invite + "Contact: <sip:200@192.168.10.45:5060>"+"\r\n";
//invite = invite + "Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,INFO,REFER,NOTIFY,SUBSCRIBE,PRACK,UPDATE"+"\r\n";
//invite = invite + "RSeq: 1"+"\r\n";
//invite = invite + "Require: 100rel"+"\r\n";
invite = invite + "User-Agent: ZTE Softswitch/1.0.0"+"\r\n";
invite = invite + "Content-Type: application/sdp"+"\r\n";
invite = invite + "Content-Length: 132\r\n\r\nv=0\r\no=ZTE 458 8607 IN IP4 10.128.0.36\r\ns=phone-call\r\nc=IN IP4 10.128.0.238\r\n";
invite = invite + "t=0 0\r\nm=audio 18000 RTP/AVP 0\r\na=ptime:20\r\na=Modem\r\n\r\n";
return invite;
}
/*
public String sipMsgInvite(String from, String to, String via, String callID)
{
invite = "INVITE sip:"+from.substring(11+5,11+5+31) +" SIP/2.0" + "\r\n";
invite = invite + "Via: SIP/2.0/UDP 192.168.10.45:5060;branch=z9hG4bK69692f44ca701.0\r\n";
invite = invite + "To:"+ from.substring(5)+"\r\n";
invite = invite + "From: "+to.substring(5)+"\r\n";
invite = invite + callID + "\r\n";
invite = invite + "CSeq: 2 INVITE"+"\r\n";
invite = invite + "Contact: <sip:200@192.168.10.45:5060>"+"\r\n";
//invite = invite + "Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,INFO,REFER,NOTIFY,SUBSCRIBE,PRACK,UPDATE"+"\r\n";
//invite = invite + "RSeq: 1"+"\r\n";
//invite = invite + "Require: 100rel"+"\r\n";
invite = invite + "User-Agent: ZTE Softswitch/1.0.0"+"\r\n";
invite = invite + "Content-Type: application/sdp"+"\r\n";
invite = invite + "Content-Length: 132\r\n\r\nv=0\r\no=ZTE 458 8607 IN IP4 10.128.0.36\r\ns=phone-call\r\nc=IN IP4 10.128.0.238\r\n";
invite = invite + "t=0 0\r\nm=audio 18000 RTP/AVP 0\r\na=ptime:20\r\na=Modem\r\n\r\n";
return invite;
}
*/
/*
v=0
o=ZTE 458 8606 IN IP4 10.128.0.36
s=phone-call
c=IN IP4 10.128.0.238
t=0 0
m=audio 18000 RTP/AVP 0
a=ptime:20
a=rtpmap:0 PCMU/8000/1
*/
public sdpAbornamal() {
Init();
}
public void Init() {
try {
dataSocket = new DatagramSocket(PORT);
receiveByte = new byte[10240];
String fromTag = null;
String callID = null;
String viaBranch = null;
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = "";
String sendStr = "";
String from = "";
String to = "";
String via = "";
String viaprack = "";
int i = 0;
int j = 0;
while (i == 0)// 无数据,则循环
{
dataSocket.receive(dataPacket);
i = dataPacket.getLength();
// 接收数据
if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
if(-1==receiveStr.indexOf("INVITE sip:"))
{
i = 0;
continue;
}
byte[] sendBuf;
int port = dataPacket.getPort();
InetAddress addr = dataPacket.getAddress();
fromTag = getString(receiveStr, "From:", "tag=");
from = getString(receiveStr, "From:", "From:");
to = getString(receiveStr, "To:", "To:");
via = getString(receiveStr, "Via:", "Via:");
callID = getString(receiveStr, "Call-ID:", "Call-ID:");
viaBranch = getString(receiveStr, "Via:", "branch=");
sipMsg100Trying(from, to, via, callID);
sendStr = Trying100;
sendBuf = sendStr.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port);//InetAddress.getByName("192.168.12.250")
dataSocket.send(sendPacket);
System.out.println(sendStr);
try{
Thread thread = Thread.currentThread();
thread.sleep(100);//暂停0.1秒后程序继续执行
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//return;
}
//String fileName = new String("F:\\project\\java\\sipMsgSimulate\\bin\\sipMsg.log");
//sendStr = prepareSipMsg200OK(fileName, fromTag, callID, viaBranch);
sendStr = sipMsg183progress(from, to, via, callID);
sendBuf = sendStr.getBytes();
sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port);//InetAddress.getByName("192.168.12.250")
dataSocket.send(sendPacket);
System.out.println(sendStr);
j = 0;
while(j==0)
{
//receives PRACK sip:
dataSocket.receive(dataPacket);
j = dataPacket.getLength();
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
}
if(receiveStr.indexOf("PRACK sip:")>=0)
{
fromTag = getString(receiveStr, "From:", "tag=");
from = getString(receiveStr, "From:", "From:");
to = getString(receiveStr, "To:", "To:");
viaprack = getString(receiveStr, "Via:", "Via:");
callID = getString(receiveStr, "Call-ID:", "Call-ID:");
//viaBranch = getString(receiveStr, "Via:", "branch=");
sendStr = sipMsgPrack200OK(from, to, viaprack, callID, 2);
sendBuf = sendStr.getBytes();
sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port);//InetAddress.getByName("192.168.12.250")
dataSocket.send(sendPacket);
}
sendStr = sipMsg180ring(from, to, via, callID);
sendBuf = sendStr.getBytes();
sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port);//InetAddress.getByName("192.168.12.250")
dataSocket.send(sendPacket);
System.out.println(sendStr);
try{
Thread thread = Thread.currentThread();
thread.sleep(200);//暂停0.1秒后程序继续执行
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//return;
}
j = 0;
while(j==0)
{
//receives PRACK sip:
dataSocket.receive(dataPacket);
j = dataPacket.getLength();
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
}
if(receiveStr.indexOf("PRACK sip:")>=0)
{
fromTag = getString(receiveStr, "From:", "tag=");
from = getString(receiveStr, "From:", "From:");
to = getString(receiveStr, "To:", "To:");
viaprack = getString(receiveStr, "Via:", "Via:");
callID = getString(receiveStr, "Call-ID:", "Call-ID:");
viaBranch = getString(receiveStr, "Via:", "branch=");
sendStr = sipMsgPrack200OK(from, to, viaprack, callID, 3);
sendBuf = sendStr.getBytes();
sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port);//InetAddress.getByName("192.168.12.250")
dataSocket.send(sendPacket);
}
sendStr = sipMsg200OK(from, to, via, callID);
sendBuf = sendStr.getBytes();
sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port);//InetAddress.getByName("192.168.12.250")
dataSocket.send(sendPacket);
System.out.println(sendStr);
//receives PRACK sip:
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
j = 0;
while(j==0)
{
//receives PRACK sip:
dataSocket.receive(dataPacket);
j = dataPacket.getLength();
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
fromTag = getString(receiveStr, "From:", "tag=");
from = getString(receiveStr, "From:", "From:");
to = getString(receiveStr, "To:", "To:");
via = getString(receiveStr, "Via:", "Via:");
callID = getString(receiveStr, "Call-ID:", "Call-ID:");
viaBranch = getString(receiveStr, "Via:", "branch=");
if(receiveStr.indexOf("ACK sip:")>=0)
{
sendStr = sipMsgInvite(from, to, via, callID);
sendBuf = sendStr.getBytes();
sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port);//InetAddress.getByName("192.168.12.250")
dataSocket.send(sendPacket);
System.out.println(sendStr);
}
}
i = 0;// 循环接收
return;
}
}
dataSocket.close();
} catch (Exception e) {
e.printStackTrace();
return;
}
}
public static void main(String args[]) {
sdpAbornamal udpserver = new sdpAbornamal();
//System.out.println(udpserver.);
}
}
- java模拟UAS发包
- iptool模拟发包工具
- winpcap模拟发包
- java调用sacpy发包
- 转 java UDP发包
- 0107 UAS Applying Extensions
- 0110 Stateless UAS Behavior
- UAS 和 UAC
- TCP发包
- 发包过程
- 发包工具
- 发包函数
- 网络发包
- 发包失败
- 返程发包
- Sip UAS 的处理流程
- UAC/UAS & sip domain设置
- Android的UAS及UAP定制
- Spring 各版本下载地址
- linux系统下ubuntu重启apache服务命令
- 什么是栈cookie保护?
- Enarm的预知未来
- xiuga
- java模拟UAS发包
- 一个人的心,最不会说谎
- 【详解】Python脚本转可执行文件进阶版
- IOS开发中,SVN如何恢复到某一个版本(以Cornerstone为例)
- Android内部存储改变读取权限
- webservice cxf 拦截器
- 先验概率与后验概率、贝叶斯区别与联系
- Android 网络编程基础
- oracle pl/sql 分隔逗号